为什么 test > file
以 1 退出,而 test arg1 > arg2
以 0 退出?
我认为在 test arg1 > arg2
中,首先应用 test arg1
然后将输出(它没有)写入文件 arg2
由于最后一个命令(重定向)成功,退出为 0。但是第一种情况也应该如此。我有点困惑。
最佳答案
重定向不是命令。
|
创建一个新命令,因为不仅前一个命令的输出“通过管道传输”到其他地方,而且还对该输出执行了另一个命令。例如,
ls | grep 'abc'
将在没有匹配该模式的情况下退出 1,无论 ls
是否成功完成)。您在 $?
中看到的退出状态是最后一个管道的状态。
重定向不一样,因为它不会将输出提供给行中的下一个命令,只是提供给一个文件。请注意,重定向可以使您返回 1,否则您的命令将起作用,因为您没有写入文件的权限。在这种情况下,您的命令将不会被执行。
TL;DR:命令需要有效的重定向才能运行。如果可以运行,则退出状态将是命令的退出状态。重定向的退出状态是命令和重定向的OR(0 OR 1, 1 OR 1, 1 OR 0都会返回1;只有重定向成功,命令成功才返回0)
关于linux - 测试命令和重定向 bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53384333/