【问题标题】:Test command and redirection bash测试命令和重定向 bash
【发布时间】:2019-04-22 09:15:06
【问题描述】:

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

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

【问题讨论】:

  • test > file 返回非零的原因与test 返回非零的原因相同。重定向无关紧要。
  • “最后一条命令(重定向)”表示您的想法有缺陷。重定向不是命令。

标签: linux bash shell command-line scripting


【解决方案1】:

重定向不是命令。

| 创建一个新命令,因为不仅是前一个命令的输出“管道”在其他地方,而且另一个命令在该输出上执行。例如,

ls | grep 'abc' 将退出 1 如果没有匹配该模式,无论 ls 是否成功完成)。您使用$? 看到的退出状态是最后一个管道的状态。

重定向不一样,因为它不会将输出提供给行中的下一个命令,而只是提供给文件。请注意,重定向 可以 使您返回 1,否则您的命令会起作用,因为您没有写入文件的权限。在这种情况下,您的命令将不会被执行。

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

【讨论】:

  • Nit:如果重定向失败,命令永远不会执行,所以说“重定向可以让你在命令工作时返回 1”是不正确的。该命令从不执行,因此不能说它有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 2012-03-09
  • 2012-09-01
  • 2013-02-28
  • 1970-01-01
相关资源
最近更新 更多