问题标签 [pipestatus]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
bash - PIPESTATUS 忽略否定?
我刚刚在 bash(版本 4.2.25(1)-release)中发现了以下结果:
因此,$PIPESTATUS
似乎在所有情况下都忽略了否定。这是一个已知的问题?我找不到任何关于它的信息。或者这是一种通缉行为?如果是这样,其背后的原因是什么?
使用 subshell 时,一切正常:
loops - 重复管道命令,直到第一个命令成功并且第二个命令失败
我试图弄清楚如何让我的 bash 脚本工作。我有以下命令:
我需要它重复,直到管道中的第一个命令成功(意味着服务器响应)并且第二个命令失败(意味着找不到模式或队列为空)。我尝试了许多组合,但似乎无法得到它。我看着使用$PIPESTATUS
,但无法让它按我想要的方式循环运行。我已经尝试了各种变化,但无法让它发挥作用。这是我目前正在尝试的:
linux - 在附加到 tee 的重定向中获取嵌套命令的退出状态
我有这个命令:
它报告代码覆盖率,然后将输出打印到stdout
并将相同的输出重定向到 grep + awk,它基本上检查代码覆盖率是少于还是多于75
. 最后,exit
在子shell 中有一个,我假装在我的 CI/CD 管道中使用它。
问题是我的 CI/CD 总是成功完成,这不应该发生,因为在我的测试中代码覆盖率低于 75%。这意味着它PIEPSTATUS
没有返回我期望它返回的内容(awk 的exit
代码)。
问题出在哪里?我究竟做错了什么?
bash - 在后台运行的进程的 PIPESTATUS 是否可跟踪?
按照赛勒斯的建议扩展问题,我想知道如果我PIPESTATUS
将它发送到后台运行,我是否可以跟踪相同的脚本或类似的脚本?
bash 脚本如下:
并且script.py
是:
当我在没有它的情况下运行bash
脚本时,&
它会正确打印,PIPESTATUS
但如果我在后台运行它,则不会返回任何输出。
bash - 退出bash时如何设置退出代码?
我想从 sub-bash 运行命令,我需要它的返回码;实际上它正在运行一个管道,我需要 PIPESTATUS 数组,或者至少一个组件。
这是我最好的猜测,但它不起作用。我只得到一个 0。由于 bash 没有出错,它是有道理的,这不是我需要的。帮助?
bash - BASH 脚本中的 PIPESTATUS[0]
我正在 Unix Bash 脚本中实现一个场景。我有两个脚本 ABC.bash 和 XYZ.bash。当请求者未输入 Y 或 y 脚本退出并显示消息且不再工作时,ABC.bash 中有一种情况。ABC.bash 单独运行时工作正常。当我从另一个 bash 脚本(即 XYZ.bash)运行它时出现问题。它不检查退出条件。XYZ.bash 中的逻辑语法。
但是当ABC.bash $a $b以状态 2 退出时,流仍然进入 IF 块而不是 ELSE。在日志中我可以看到消息DEBUGMODE 设置为 0。我需要这个 DEBUGMODE 设置,因为它是必需的,但如果 ABC.bash 退出,我想退出。理想情况下,它应该进入 ELSE 部分,因为 ABC.bash 因用户输入错误而退出。
此外,我在 XYZ.bash 脚本中设置了 DEBUGMODE 选项。喜欢-
bash - 尽管输出通过 sed 管道传输,但仍保持 bash 命令的退出代码
我刚刚注意到,即使编译失败,我的一些 CI 作业也返回了 OK。这本质上是因为调用 bash 命令来编译代码,虽然失败并返回 1,但它的输出通过管道传输sed
以向输出添加一些颜色等。
本质上,这归结为以下几点
我知道在 bash 上有PIPESTATUS
,所以我可以${PIPESTATUS[0]}
用来获取在管道之前运行的命令的退出代码。但是如何围绕任何命令进行包装,以便将其输出通过管道传输到 sed,然后返回命令本身的退出代码(丢弃 的退出代码sed
)?
为了使它真正通用,假设我想将任何命令的输出通过管道传输到 sed 以在每行输出之前添加一个彩色前缀:
如上所述,由于管道 to sed
,无论返回什么都将返回 0 ls
,并且将显示目录内容,每行前面都有一个红色OUTPUT:
。
我可以定义一个函数、别名等(我们称之为“wrap”)来让我调用,例如wrap ls *.txt
,以这样一种方式ls *.txt
执行,输出通过 sed 模式传输,并ls *.txt
返回其自身的退出代码,这样
perl - 在 CentOS 6 和 Ubuntu 20.04(在 Perl 中)上捕获不同子进程的退出状态?
我正在将一个 perl 备份脚本从 CentOS 6 改编为 Ubuntu 20.04。
子例程 ExecCmd() 为 rsync 的系统调用启动一个子进程。
在 CentOS 6 上,它使用 rsync 输出填充变量 $ExecCmdOut 并返回退出状态 $pipestatus。
在 Ubuntu 上,$pipestatus 包含 rsync 输出的最后一行。在我看到的日志中
这是功能。你能看出为什么吗?