У меня есть скрипт 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 $?
эху код выхода не эхо
Так что мой вопрос: можно отрицать вывод команды «КСС» в состоянии?
Спасибо.
Вы не цитируете '$ SAME', поэтому, если он действительно пуст, ваш тест на самом деле' [! ] ', который всегда равен * true, поскольку'! 'является непустой строкой. – chepner
'SAME' - это не код выхода, а вывод команды' cmp'. – anubhava
@TylerDurden Вот что говорит http://stackoverflow.com/tour: 'Stack Overflow - это вопрос и ответ для профессиональных и энтузиастов-программистов.' – eakl