我想将diff用作if语句条件,但也将diff输出到stdout。但是,当我将diff作为条件时,它不会运行命令/显示输出:
if [ "diff -rq dir1 dir2" != "" ]
then
echo "there are differences"
exit 5
fi
我希望在两个目录存在差异时输出差异,但这不会打印差异,只输出there are differences
。
如果我在if条件之外运行<{1}} ,它将打印出diff -rq dir1 dir2
例如。我知道我可以在if语句Only in dir1: xyz.txt
中编写命令diff -rq dir1 dir2
但是有更好的方法吗?
答案 0 :(得分:1)
您正在比较文字字符串&#34; diff -rq dir1 dir2&#34;到文字字符串&#34;&#34;。显然这些不匹配,您的if
条件得到满足,并且您的回声运行。
要实现您的目标,请利用diff
当且仅当文件不同时才返回非零的事实:
if ! diff -rq dir1 dir2; then
echo "they differ"
exit 5
fi
不要将diff
的输出比较为空或不是:那不是UNIX方式。