|
|
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的子进程;是贝壳的。可悲的是,你想要的是不可能的。 |
|
|
jjmerelo · 使用Proc::Async从绑定管道读取 8 年前 |
|
|
Vingtoft · 使用管道的Python多进程无阻塞内部通信 8 年前 |
|
|
marc · grep pipe sed命令 8 年前 |
|
|
Wolfat · 无法从C中的管道执行读取? 8 年前 |
|
|
E.S. · Java-重定向进程输入/输出(管道)暂停[重复] 8 年前 |
|
|
Arka Pal · 关闭管道中未使用的端部 8 年前 |