【发布时间】:2018-01-15 08:42:57
【问题描述】:
我想知道,当程序退出时,将信息从程序传递到调用脚本的正确方法是什么?假设我有“程序 X”和一个应该执行以下操作的 shell 脚本:
1) 调用可以返回“状态A”或“状态B”的“程序X”
2) 成功执行“程序 X”后,继续执行 3A) 或 3B),取决于它的返回状态
3A) 做一些在“程序X”中不容易做到的事情
3B) 做一些在“程序X”中不容易做的事情
当然,我可以简单地使用返回码来指示 shell 脚本应该如何继续。但是,我认为退出代码 0 表示成功,而所有其他值表示错误是一个被广泛接受的约定。从这个角度来看,使用退出代码来确定后续控制流(成功执行后)显然是对系统的滥用。
所以我的问题是:实现这一目标的正确方法是什么?
感谢任何提示!
【问题讨论】:
-
当你调用一个程序时,按照惯例,它会返回退出状态,'0' no-error,或者在失败时返回一个正的错误代码。 (并非所有程序都符合,但所有正常程序都符合)在您的脚本中,您只需测试程序是否成功执行,例如
if ! ./program; then #handle error; fi。差不多就是这样。 -
@DavidC.Rankin 我从字面上说我不想使用退出代码系统,我这样做的原因以及 3A) 和 3B) 与成功执行无关。
-
如果不使用退出代码,您将无法执行此操作。 (除非你做了一些非常棘手的事情,比如查看
Program所做的事情,或者将其输出通过管道传输到read并进行测试)。您问“实现此目标的正确方法是什么?” - 答案是检查退出代码。 -
您是否有三种可能的结果(“A”、“B”和失败)?如果是这样,您将需要进程替换 (
case "$(programX)" in "StateA") do3A;; "StateB") do3B;; esac)。但是,如果您可以使用退出状态(例如grep或test)会更容易 - 这就是它的用途!