4

我使用以下脚本与文件夹进行比较:

if diff "/home/folder1/" "/home/folder2/" &> /dev/null ; then
    echo "Files in the two folders are the same"    
else
    echo "Files in the two folders are NOT the same"
fi

有没有一种简单的方法来解释“&> /dev/null”实际上是做什么的,它是否返回一个布尔值 true/false?

我的主要问题是:相反的情况是什么?我的意思是,假设我希望“if diff”问题是“两个文件夹的内容不一样吗?”

4

3 回答 3

6

&> /dev/null将 stdout 和 stderr 输出重定向到/dev/null,有效地抑制了进程的所有输出。程序的退出代码(数字“结果”,通常表示“成功”(0)或“失败”(任何其他数字))不受此影响。

要反转条件(diff),只需插入感叹号,说明not运算符:

if ! diff "/home/folder1/" "/home/folder2/" &> /dev/null ; then
...

当(且仅当)它没有发现任何差异时,该diff工具总是以退出值终止。0如果有差异,1就是退出值;如果出现问题(I/O 错误或类似情况),2则为退出值。shell将if退出值解释0,所有其他值解释为(请注意,因为这与其他编程语言完全相反!)。

于 2014-07-16T09:43:16.590 回答
0

diff "folder1" "folder2"将返回两个文件夹之间的差异列表。

&> /dev/null标准输出(所有终端输出,不是错误)重定向到所有标准输出和标准错误到一个名为的虚拟设备null,该设备会丢弃您的数据。

于 2014-07-16T09:42:11.743 回答
0

The &> redirects both normal output and errors to a file. In this case it uses the file "/dev/null" which is also called the bit bucket: it simply throws everything away. That means the output is discarded. If you don't do this your script will show the output from the commands (which you don't want to show up in the output).

See also: http://wiki.bash-hackers.org/syntax/redirection

于 2014-07-16T09:43:47.633 回答