gpt4 book ai didi

bash - 在另一个脚本中获取最后一个 shell 命令的退出代码

转载 作者:行者123 更新时间:2023-11-29 08:41:50 25 4
gpt4 key购买 nike

我正在尝试加强我的通知脚本。脚本的工作方式是我将它放在长时间运行的 shell 命令后面,然后在长时间运行的脚本完成后调用各种通知。

例如:

sleep 100; my_notify

如果能得到长时间运行的脚本的退出代码就好了。问题是调用 my_notify 会创建一个无法访问 $? 变量的新进程。

比较:

~ $: ls nonexisting_file; echo "exit code: $?"; echo "PPID: $PPID"
ls: nonexisting_file: No such file or directory
exit code: 1
PPID: 6203

对比

~ $: ls nonexisting_file; my_notify
ls: nonexisting_file: No such file or directory
exit code: 0
PPID: 6205

my_notify 脚本中包含以下内容:

#!/bin/sh
echo "exit code: $?"
echo "PPID: $PPID"

我正在寻找一种方法来获取上一个命令的退出代码,而无需过多更改命令的结构。我知道如果我将它更改为更像 time,例如my_notify longrunning_command... 我的问题会得到解决,但我实际上喜欢我可以在命令结束时解决它,我担心第二种解决方案的复杂性。

这可以做到吗,或者它是否与 shell 的工作方式根本不兼容?

我的 shell 是 Z shell (zsh),但我希望它也能与 Bash 一起使用。

最佳答案

您确实需要使用 shell 函数才能完成此操作。对于像这样的简单脚本,让它在 zsh 和 bash 中工作应该很容易。只需将以下内容放入文件中:

my_notify() {
echo "exit code: $?"
echo "PPID: $PPID"
}

然后从您的 shell 启动文件中获取该文件。虽然因为那将从您的交互式 shell 中运行,您可能希望使用 $$ 而不是 $PPID。

关于bash - 在另一个脚本中获取最后一个 shell 命令的退出代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12999830/

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