gno*_*ule 1 unix linux bash exit-code
在命令行上,在两个不同的文件上使用diff后,命令
echo $?
Run Code Online (Sandbox Code Playgroud)
报告回'1'.当我在脚本中尝试相同的操作时,如下所示:
echo "` diff $F1 $F2`"
rv=$?
if [[ $rv == 1 ]]
then
echo "failed"
fi
Run Code Online (Sandbox Code Playgroud)
然后我从不打印'失败'(即使是不同的文件).请注意,这是bash shell,因此语法应该没问题(例如,如果我检查'0',它总是打印).
如何检查diff命令是否发现差异,并有条件地处理?
这是在Ubuntu 12.04下.
您没有看到返回值,diff因为最后运行的命令实际上是echo并且您看到了它的返回值。您应该能够使用以下代码实现所需的效果(捕获然后回显的输出diff是不必要的 - 只需让它写入标准输出):
diff $F1 $F2
rv=$?
if [[ $rv == 1 ]]
then
echo "failed"
fi
Run Code Online (Sandbox Code Playgroud)
另请注意,diff错误时返回大于 1 的值(0表示相同的文件,1表示不同的文件)。您可能需要检查并处理这种情况。
来自你的评论:
但我想首先打印差异,但也要跟踪有多少比较失败.
我不知道diff是否输出退出代码中的差异数.我想不是.但你可以算一下......
以下是存储退出代码和计算不同行数的方法
var=$(diff "$F1" "$F2")
#store diff exit code
exit_code=$?
# remember that this is not the same as count of differences
lines_output_by_diff=$(wc -l <<< "$var")
echo "$var"
if (($exit_code == 0)); then
echo "same"
else
echo "not same"
fi
Run Code Online (Sandbox Code Playgroud)