我试图在bash脚本中调用两个文件,一个使用变量给出,另一个是目录中的最新文件。这是我正在使用的命令,其中$ file是一个变量,指向当前目录中的文件,而$ dir是一个指向另一个目录的变量,我正在搜索最新文件:
diff $FILE $DIR/$(ls -tr | tail -n 1) > diff.txt
我很确定问题在于尝试在目录$ dir中调用"搜索最新文件"命令。这是否不会返回$ dir?
当您编写它时,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
执行此操作时要小心,因为$?
被任何后续命令覆盖。这甚至可以在同一管道中包含命令。
怎么样?
diff $FILE $DIR/$(ls -tr $DIR| tail -n 1) > diff.txt
确保仅在$DIR
上运行ls
:
diff "$FILE" "$DIR/$(ls -tr "$DIR"| tail -n 1)" > diff.txt
还强烈建议您注意命令中的额外报价。
,所以我发现这是唯一正确起作用的东西:
diff "$FILE" "$DIR/$(ls -tr "$DIR"| tail -n 1)" > diff.txt
谢谢大家,您的意见有所帮助。
再一个快速的问题。有没有办法告诉DIFF是否发现两个文件有所不同?我可以以某种方式将上面的整个代码行添加到"如果"语句中吗?
您可以这样尝试,
如果!扩散;然后 回声"他们不同"fi