首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Bash:否定“cmp”命令的输出无效

Bash:否定“cmp”命令的输出无效
EN

Stack Overflow用户
提问于 2017-02-07 18:53:17
回答 1查看 1.3K关注 0票数 0

我有一个bash脚本,它检查文件是否已经存在或已经更改。如果任何一种情况都是正确的,请将文件从一个位置复制到另一个位置。

代码语言:javascript
运行
复制
DIR="$( cd "$( dirname "${BASH_SOURCE}" )/my-dir" && pwd )"
FILE="file.json"

copy() {
  local SAME=$(cmp --silent "${DIR}/${FILE}" "${PWD}/${FILE}")

  if [ ! -f "${PWD}/${FILE}" ] || [ ! $SAME ]; then
    cp "${DIR}/${FILE}" "${PWD}/${FILE}" && echo "'$FILE' has been copied." || echo "Copy of '$FILE' has failed.";
  else
    echo "'$FILE' already exists and has not changed (not copied).";
  fi;
}

copy

但是,当文件存在且未更改时,仍将复制该文件。

echo "$SAME"不回显任何内容,但echo $?回显退出代码

因此,我的问题是:在某种情况下,是否可以否定“cmp”命令的输出?

谢谢。

EN

Stack Overflow用户

发布于 2017-02-07 18:56:16

你需要引用你的参数展开。如果$SAME是空字符串(因为您使用了--silent),那么测试将转移到[ ! ]。因为!是一个非空字符串,所以测试成功.

代码语言:javascript
运行
复制
if [ ! -f "${PWD}/${FILE}" ] || [ ! "$SAME" ]; then

SAME还需要包含cmp的输出。

代码语言:javascript
运行
复制
SAME=$(cmp "${DIR}/${FILE}" "${PWD}/${FILE}")

但是,最好忽略cmp的实际输出,而使用它的退出状态。

代码语言:javascript
运行
复制
if [ ! -f "$PWD/$FILE" ] || ! cmp --silent "${DIR}/${FILE}" "${PWD}/${FILE}"; then
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42097680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档