测试命令和重定向bas​​h

时间:2018-11-19 23:56:20

标签: linux bash shell command-line scripting

为什么test > file以1退出而test arg1 > arg2以0退出?

我认为在test arg1 > arg2中,首先应用test arg1,然后将输出(没有输出)写入文件arg2,并且由于最后一个命令(重定向)成功,所以退出是0。但是第一种情况也应该如此。我有点困惑。

1 个答案:

答案 0 :(得分:2)

重定向不是命令。

|创建一个新命令,因为不仅先前命令“ piped”的输出在其他位置,而且在该输出上执行了另一个命令。例如,

ls | grep 'abc'将在没有任何匹配该模式的情况下退出1,而不管ls是否成功完成)。您在$?中看到的退出状态是最后一个管道的状态。

重定向是不一样的,因为重定向不会将输出传递给下一个命令,而不会传递给文件。请注意,重定向 可以使您在命令原本可以工作的情况下返回1,因为您没有写该文件的权限。在这种情况下,您的命令将不会执行。

TL; DR:命令需要有效的重定向才能运行。如果可以运行,则退出状态将是命令的退出状态。重定向的退出状态是命令的OR,并且重定向(0 OR 1、1 OR 1、1 OR 0都将返回1;仅成功的重定向和成功的命令将返回0)