有没有类似的选项dash
外壳对应于pipefail
in bash
?
或者如果管道中的命令之一失败(但不退出,则获得非零状态的任何其他方式)set -e
would).
为了更清楚地说明这一点,这是我想要实现的目标的示例:
在示例调试 makefile 中,我的规则如下所示:
set -o pipefail; gcc -Wall $$f.c -o $$f 2>&1 | tee err; if [ $$? -ne 0 ]; then vim -o $$f.c err; ./$$f; fi;
基本上,它运行时会在出现错误时打开错误文件和源文件,并在没有错误时运行程序。节省了我打字的时间。上面的代码片段效果很好bash
但我较新的 Ubuntu 系统使用dash
这似乎不支持pipefail
option.
如果以下命令组的第一部分失败,我基本上想要 FAILURE 状态:
gcc -Wall $$f.c -o $$f 2>&1 | tee err
这样我就可以用它来if
陈述。
有没有其他方法可以实现它?
Thanks!
我遇到了同样的问题以及 bash 选项set -o pipefail
and ${PIPESTATUS[0]}
在我正在使用的 docker 映像上的 dash shell (/bin/sh) 中都失败了。我不想修改图像或安装另一个包,但好消息是使用命名管道对我来说非常有效 =)
mkfifo named_pipe
tee err < named_pipe &
gcc -Wall $$f.c -o $$f > named_pipe 2>&1
echo $?
请参阅此答案以了解我在哪里找到信息:https://stackoverflow.com/a/1221844/431296 https://stackoverflow.com/a/1221844/431296
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)