"对面" &>的/ dev / null的

时间:2014-07-16 09:38:24

标签: bash if-statement dev-null

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

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?

我的主要问题是:相反的是什么?我的意思是,说我想要"如果差异"问题是"两个文件夹的内容不一样吗?"

3 个答案:

答案 0 :(得分:4)

您的&> /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的if0的退出值解释为 true ,并将所有其他值解释为 false (请注意,因为这是相当的与其他编程语言相反!)。

答案 1 :(得分:0)

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

&> /dev/null重定向 stdout(所有终端输出,这不是错误)所有stdout和stderr到名为null的虚拟设备丢弃您的数据。< / p>

答案 2 :(得分:0)

&amp;&gt;将正常输出和错误重定向到文件。在这种情况下,它使用文件&#34; / dev / null&#34;这也被称为比特桶:它只是抛弃一切。这意味着输出被丢弃。如果你不这样做,你的脚本将显示命令的输出(你不想在输出中显示)。

另请参阅:http://wiki.bash-hackers.org/syntax/redirection