ファイルが既に存在するか変更されているかをチェックするbashスクリプトがあります。これらのいずれかの場合に該当する場合は、ファイルをある場所から別の場所にコピーします。ファイルが存在しており、変更ないを持っている場合Bash: 'cmp'コマンドの出力を無効にすることができません
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」コマンドの出力を否定することは可能でしょうか?
ありがとうございました。
あなたは '$ SAME'を引用していませんので、本当に空であれば、あなたのテストは実際に' [! ] 'であり、'! 'は空ではない文字列なので* always * trueです。 – chepner
'SAME'は終了コードではなく、' cmp'コマンドの出力です。 – anubhava
@TylerDurdenここで、http://stackoverflow.com/tourページには、Stack Overflowがプロと熱心なプログラマーのための質問と回答のサイトです。 – eakl