exit-status

确保 Shell 脚本的退出代码可区分
exit-status

确保 Shell 脚本的退出代码可区分

假设我有两个 shell 脚本,a.sh和b.sh,其中在内部某处a.sh调用b.sh。然后,假设b.sh可以使用退出代码0、1或退出2。 可以采用哪些技术来确保 的退出代码a.sh与 的退出代码可区分b.sh?例如,如果我们决定a.sh可以使用退出代码退出1,那么这对调用者来说是不明确的——是a.sh失败了,还是b.sh失败了?这意味着a.sh不应使用退出代码1或2.但可供选择的退出代码数量有限,并且b.sh理论上可以随着其发展添加任意数量的附加退出代码。 是否有技术可以用来传递一些带有退出代码的额外数据,以确保我们作为脚本用户能够区分哪个程序居然失败了?...

Admin

检测上一行是否是命令
exit-status

检测上一行是否是命令

我想启用Windows 终端外壳集成在bash中。 (不要评判我。)一个很好的功能是终端可以在每个命令的滚动条中显示一个标记,其颜色取决于命令执行是否成功。但是,如果没有执行任何命令(空行、Ctrl-C...),则颜色应保持中性。 这是通过在提示中放置特殊的转义序列来实现的。我当前提示的简化版本如下: PS1="\[\e]133;D;\$?\a\] \$ \[\e]133;B\a\]" 在那里,\e]133;D;\$?\a标记上一个命令的结束,并;\$?包括最后的返回代码,让终端知道它是如何结束的。 (并\e]133;B\a标记提示的结束。)我想不是;\$...

Admin

是否存在出现错误时退出 0 的 tar 实现?
exit-status

是否存在出现错误时退出 0 的 tar 实现?

Vim 运行时提交 3d37231437fc0f761664a7cabc8f7b927b468767尝试通过删除文件名不包含警告、错误、不适当或无法识别的单词的假设来修复 tar 编辑插件。该插件包含此代码,用于在打印消息但退出代码为 0 的情况下检测错误。 正如你在提交中看到的, 然而,整个 if 条件似乎有点可疑。如果发生错误,这可能已经在前面的 if 语句中被捕获,因为它会检查 tar 程序的返回代码。 然而,可能存在 tar 实现,它不会为某种错误设置退出代码(但打印错误消息)?但现在让我们保留这个检查,直到现在还没有多少人注意到这种行为,所以无论...

Admin

更新:
exit-status

更新:

zsh我在脚本中有很长的命令管道: pv /dev/sda > sda.raw | sha256sum > sda.raw.sha256 | cut -c61-64 | read SHASUM 如何在if语句内部检查所有命令是否成功退出? 我知道${pipestatus[@]},但它是一个数组。所以我必须单独检查每个元素。 是否有一些快捷方式可以检查${pipestatus[@]}仅包含0? 更新: 我发现了一些奇怪的行为: 为了进行测试,我设置了小型文件系统(10MB),以便它很快填满: #!/bin/zsh set -o pipefail...

Admin

使用输出重定向从 csh 中调用脚本
exit-status

使用输出重定向从 csh 中调用脚本

我想要什么: #!/bin/csh # call /myscriptpath/myscript.any and redirect 2>&1 and get retval and output set my_msg = `/myscriptpath/myscript.any` set my_ret = `echo $?` 如何从 myscript.any 捕获退出代码? 如果可能的话,如何从 myscript.any 捕获消息? /myscriptpath/myscript.any 这按预期从 bash 命令行调用。 ...

Admin

`return 0` 是否等于 `true` (在 shell 环境的源脚本中)?
exit-status

`return 0` 是否等于 `true` (在 shell 环境的源脚本中)?

我正在开发一个高度可移植的脚本,用户应将其来源到他们的 shell,这迫使我使用 POSIX 脚本。 脚本中有许多有用的函数,其中之一很特殊,因为它返回调用函数的状态true。false return 0现在,我曾经在这样的情况下使用过。但它似乎更具可读性true或falseforreturn 1也分别有效。 问题是这些是否有效非常同样的方式或者是否有差异。谢谢。 ...

Admin

为什么“trap”传递的是零而不是进程被杀死的信号?
exit-status

为什么“trap”传递的是零而不是进程被杀死的信号?

考虑以下: #!/bin/bash trap 'echo $?' INT kill -INT $$ 输出:0 在这里我期望130我的系统。当然,如果我做了 aCtrl + C那么我会得到130。 HUP对于任何其他信号(如或 )也会发生同样的情况TERM。我发现这种行为令人惊讶,因为如果您设置了trap捕获许多信号的设置,那么就无法使用调用处理程序的信号的正确错误代码退出: #!/bin/dash exit_abrupt() { exit_code=$? echo "Encountered an error, cleaning up.....

Admin

取消进程的退出状态
exit-status

取消进程的退出状态

$?在一个项目中,我有一个测试设置,我可以在其中读取命令的退出状态。 在我的测试中,我想确保foobar输出中不存在该字符串。 当我运行命令时: ./program | grep foobar 返回1,表示失败。 我需要它返回0。 有没有办法取消返回值? ...

Admin

获取第二个命令中管道中第一个命令的退出状态
exit-status

获取第二个命令中管道中第一个命令的退出状态

我的问题类似于获取通过管道传输到另一个进程的退出状态,但我想获取管道中第二个命令的退出状态之内管道。 这是一个例子 - false | echo $? 回报0而非预期1 PIPESTATUS给出之前的错误代码 false | echo $PIPESTATUS 返回0第一次,然后返回1,给出操作本身之后的结果。我的目的是创建一个像这样的函数: debug() { # Eventually will be formatted as JSON echo "$(cat) was the result and the error code was $?" ...

Admin

systemctl 找不到可执行文件,而 root 可以?
exit-status

systemctl 找不到可执行文件,而 root 可以?

奇怪的事情:我创建了一个服务,它应该启动一个 springboot fat archive webserver。服务: #!/bin/bash [Unit] Description=JalouWeb [Service] Type=simple WorkingDirectory=/opt/jaloucontrol ExecStart=/bin/bash jalouweb.sh TimeoutStartSec=0 RestartSec=60 Restart=always SyslogIdentifier=jalouweb [Install] WantedB...

Admin

获取管道输出集的第一行存在状态 141,该状态使用 set -eo pipelinefail 使 bash 脚本失败
exit-status

获取管道输出集的第一行存在状态 141,该状态使用 set -eo pipelinefail 使 bash 脚本失败

我有一个 bash 脚本,它运行一个命令,我只想从中获取第一行输出。 显而易见的答案是some_command | head -1,对吧?好吧,这在 99% 的情况下都有效,但是当输出足够大时,它有时会失败,退出代码为 141,因为我set -eo pipefail在顶部。awk '{ print; exit; }'适用于更多情况,但在输出足够大时仍然失败。这个简单的脚本重现了该问题: #!/bin/bash set -eo pipefail seq 1 100000 | awk '{ print; exit; }' | tee echo "This is ...

Admin

让 systemd 将意外退出视为失败
exit-status

让 systemd 将意外退出视为失败

我将第三方可执行文件包装在 systemd 服务单元中来管理它。我无法改变这个程序的行为,而且我并不真正信任它的退出代码。我想将任何不是由 systemd 引起的退出视为失败,包括退出代码 0 或外部 SIGTERM,这样我就可以通过 systemd 的接口检测到差异。 目前我的单位看起来像: [Unit] Description=Foo service Requires=bar.service After=bar.service [Service] ExecStart=/opt/foo/foo -stayresident KillMode=control...

Admin

将 set -e (errexit) 与命令块一起使用,并在该块失败时执行另一个命令 (SC2181)
exit-status

将 set -e (errexit) 与命令块一起使用,并在该块失败时执行另一个命令 (SC2181)

我刚刚发现,set -e因为我正在寻找“如何运行许多命令(不带&&)并立即停止其中任何命令的非零退出代码?”的答案。这set -e对我来说已经足够好了,直到我发现 (set -e; false; echo here) || echo error 确实产生here而不是error.但当我很快找到一个新问题的解决方案时: (set -e; false; echo here); [ $? -ne 0 ] && echo error 我还遇到了一个老问题,$?而不是if cmd(SC2181)。 现在我有一个新问题:我是否只是忽略...

Admin