gpt4 book ai didi

bash - 相当于 dash shell 中的 pipefail

转载 作者:行者123 更新时间:2023-11-29 08:43:35 26 4
gpt4 key购买 nike

dash shell 中是否有类似的选项对应bash 中的pipefail

或者如果管道中的命令之一失败(但不退出,set -e 会退出),则获取非零状态的任何其他方式。

为了更清楚,这里是我想要实现的示例:

在示例调试 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 上运行良好,但我较新的 Ubunty 系统使用 dash,它似乎不支持 pipefail 选项。

如果以下命令组的第一部分失败,我基本上想要一个 FAILURE 状态:

gcc -Wall $$f.c -o $$f 2>&1 | tee err

这样我就可以将其用于 if 语句。

有没有其他方法可以实现它?

谢谢!

最佳答案

我遇到了同样的问题,在 dash shell (/bin/sh) 在我正在使用的 docker 图像上。我宁愿不修改图像或安装另一个包,但好消息是使用命名管道对我来说非常有效 =)

mkfifo named_pipe
tee err < named_pipe &
gcc -Wall $$f.c -o $$f > named_pipe 2>&1
echo $?

有关我在哪里找到信息,请参阅此答案:https://stackoverflow.com/a/1221844/431296

关于bash - 相当于 dash shell 中的 pipefail,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17757039/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com