|
|
1
1
不幸的是,bash丢弃了管道上的退出状态。运行“sleep 3 | echo hi”会在睡眠完成之前启动echo,因此绝对没有机会捕获第一个命令的退出状态。 您可以(理论上)通过将bash命令更改为命令列表来运行它——bash将把值保存在$(就像Perl一样),但是您必须以某种方式将它传递给Perl脚本,这意味着您的Perl脚本将需要接受命令行上的前一个程序的退出状态。 或者,您可以重写Perl脚本来运行命令,并捕获退出状态,或者将整个过程包装到另一个脚本中。 |
|
|
2
8
bash环境变量
因此,与其重构perl脚本,不如只需要运行管道命令的脚本来检查
如果需要检查初始可执行文件和perl脚本的状态,则需要首先将$PIPESTATUS分配给另一个变量:
然后你可以单独检查,比如
你必须通过一个temp变量来实现这一点,因为下一个语句,即使是一个
注意,这些东西只适用于bash,而不是原始的bourne shell(通常是
而不是
|
|
|
3
4
为了详细说明Ether的建议,这是shell的解决方法:
缺点:
这是一个有点小侵入性的变化相比,以太的脚本使用的变化
|
|
|
4
3
我看到两种选择:
但是,由于您是在命令退出之前从命令读取Perl脚本中的输入,因此显然还没有返回代码。只有在命令完成后,您才能访问它,因此您需要同时将其输出缓冲到其他地方,例如文件:
|
|
|
5
2
您只能获得自己子进程的退出状态。连接到STDIN的不是perl的子进程;是贝壳的。可悲的是,你想要的是不可能的。 |
|
|
Carsten · 使用最近的搜索模式更改文本块 1 年前 |
|
|
A.Ellett · 测试-t STDIN与-t<STDIN> 2 年前 |
|
|
con · 如何跳转到foreach迭代的特定点? 2 年前 |