我正在尝试在bash脚本中的两个文件上调用diff,一个是使用变量给出的,另一个是目录中的最新文件。这是我正在使用的命令,其中$ FILE是指向当前目录中文件的变量,$ DIR是指向我正在搜索最新文件的另一个目录的变量:
diff $FILE $DIR/$(ls -tr | tail -n 1) > diff.txt
我很确定问题在于尝试在$ DIR目录中调用“搜索最新文件”命令。这不会返回$ DIR给出的目录中的最新文件吗?
答案 0 :(得分:1)
正如您所写,ls
命令在当前目录中运行。您可以通过明确告知ls
要列出的目录来解决此问题:
diff "$FILE" "$DIR/$(ls -tr $DIR | tail -n 1)" > diff.txt
如果找不到差异,diff
命令的返回码为0
,如果找到差异,返回码为1
。上一个命令的返回码存储在变量$?
中,可以在以下if
语句中使用:
if (( $? == 0 ))
then
echo "match..."
else
echo "no match..."
fi
执行此操作时要小心,因为任何后续命令都会覆盖$?
。这甚至可以包含同一管道中的命令。
答案 1 :(得分:1)
怎么样?
diff $FILE $DIR/$(ls -tr $DIR| tail -n 1) > diff.txt
答案 2 :(得分:1)
请务必仅在ls
上运行$DIR
:
diff "$FILE" "$DIR/$(ls -tr "$DIR"| tail -n 1)" > diff.txt
另请注意,强烈建议在命令中使用额外引用。
答案 3 :(得分:0)
所以我发现这是唯一正常的方法:
diff "$FILE" "$DIR/$(ls -tr "$DIR"| tail -n 1)" > diff.txt
谢谢大家,您的意见得到了很多帮助。
一个更快的问题。有没有办法判断diff是否发现这两个文件不同?我能否以某种方式将上面的整行代码添加到“if”语句中?
答案 4 :(得分:0)
你可以这样试试,
如果!延迟;然后 回声“他们是不同的” 网络