bash – 在另一个脚本中获取last shell命令的退出代码

前端之家收集整理的这篇文章主要介绍了bash – 在另一个脚本中获取last shell命令的退出代码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图加强我的通知脚本。脚本的工作方式是,我把它放在一个长时间运行的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"

我正在寻找一种方法来获得上一个命令的退出代码,而不改变命令的结构太多。我知道的事实,如果我改变它的工作更像时间,例如。 my_notify longrunning_command …我的问题会解决,但我实际上喜欢,我可以在命令结束时粘,我担心第二个解决方案的并发症。

这可以做,或者是从根本上与shell工作方式不兼容?

我的shell是zsh但我想它使用bash以及。

你真的需要使用一个shell函数来完成它。对于一个简单的脚本,它应该很容易使它工作在zsh和bash。只需将以下内容放在一个文件中:
my_notify() {
  echo "exit code: $?"
  echo "PPID: $PPID"
}

然后从您的shell启动文件中导出该文件。虽然既然这将从你的交互式shell中运行,你可能想使用$$而不是$ PPID。

猜你在找的Bash相关文章