我想知道,当程序退出时,将信息从我的程序传递到调用脚本的正确方法是什么?假设我有"程序X"和一个应该执行以下操作的shell脚本:
1) 调用可以返回"状态 A"或"状态 B"的"程序 X"
2) 成功执行"程序X"后,继续执行3A)或 3B),取决于其返回状态
3A)做一些在"程序X"中不容易完成的事情
3B)做一些在"程序X"中不容易完成的其他事情
当然,我可以简单地使用返回代码来指示 shell 脚本应该如何继续。但是,我认为退出代码 0 表示成功,所有其他值表示错误是一种广泛接受的约定。从这个角度来看,使用退出代码来确定后续的控制流(成功执行后)显然是对系统的滥用。
所以我的问题是:实现这一目标的正确方法是什么?
感谢您的任何提示!
这是 shell 中命令替换的简单应用。
命令替换
假设ProgramX
、3A
&3B
是你的可执行文件。
而不是返回State A/State B
而是简单地根据条件回显3A/3B
在ProgramX
然后简单地使用命令替换
$(ProgramX)
以上将相应地运行3A
或3B
。
注意:缺点是您将无法打印任何其他内容来stdout
。
编辑:为什么不根据条件将 3A 或 3B 附加到程序 X 的末尾
程序X
#at the end
[ 'condition for 3A' ] && 3A
[ 'condition for 3B' ] && 3B
顺便说一下,你在这里没有打破任何惯例
编辑:退出状态方式
如果您想以退出状态方式执行此操作,则在ProgramX
基于条件返回 58 或 59。好吧,您实际上可以返回任何东西,但 58 是十进制 # 对应于十六进制中的 3A,59 对应于 3B 的十进制 #。
程序X
#at the end
[ 'condition for 3A' ] && exit 58
[ 'condition for 3B' ] && exit 59
然后做
[ $? -eq 58 ] && 3A
[ $? -eq 59 ] && 3B