说我有两个脚本,只是从没用标打印回返回代码:BASH:如何判断脚本是否使用退出?
SCRIPT1
(echo; exit 0)
echo $?
SCRIPT2
(echo)
echo $?
两个回馈0
。但是有没有办法告诉第一个下标明确使用exit
命令?
说我有两个脚本,只是从没用标打印回返回代码:BASH:如何判断脚本是否使用退出?
SCRIPT1
(echo; exit 0)
echo $?
SCRIPT2
(echo)
echo $?
两个回馈0
。但是有没有办法告诉第一个下标明确使用exit
命令?
经过一番研究,我获得了一些突破。也就是说,您可以设置一个exit_handler
,通过简单地检查最后一条命令来确定是否有退出呼叫。
#! /bin/bash
exit_handler() {
ret=$?
if echo "$BASH_COMMAND" | grep -e "^exit " >> /dev/null
then
echo "it was an explicit exit"
else
echo "it was an implicit exit"
fi
exit $ret
}
trap "exit_handler" EXIT
exit 22
这将打印
it was an explicit exit
现在为了告诉父母,而不是呼应,我们可以相当写入到文件,命名管道或别的什么东西。
作为每choroba,exit
的注意到没有参数会给implicit call
,这是公认的错误的,因为exit
(无参数)是一样的exit $?
。因此,正则表达式必须考虑到这一点:
#! /bin/bash
exit_handler() {
ret=$?
if echo "$BASH_COMMAND" | grep -e "^exit \|^exit$" >> /dev/null
then
echo "it was an explicit exit"
else
echo "it was an implicit exit"
fi
exit $ret
}
trap "exit_handler" EXIT
exit 22
您正在每个'script1'和'script2'中实现'exit_handler()'。如果'script2'中的最后一个命令是'echo',现在该退出“'了? – 2014-09-04 20:56:40
我考虑到了这一点。它不应该与正则表达式'^ exit'一起传递,因为正则表达式只允许以退出后跟一个空格开始的命令。唯一的命令是'exit' – Pithikos 2014-09-04 21:04:38
看起来是一个很好的解决方案。我重新访问了'man bash'的'Shell Variables'部分。我认为你遇到了一个很好的解决方案。我唯一的好奇心就是'BASH_COMMAND'中描述的方式,具体来说,**它是在陷阱**时执行的命令。显然它正在工作,但看到**这是在陷阱**之前执行的最后一个命令将是令人欣慰的。哦,我仍然喜欢它:) – 2014-09-04 21:16:39
不是我所知道的。你为什么想这样做? – 2014-09-04 18:01:56
只需以不同于0的值退出以指示退出。 – choroba 2014-09-04 18:02:57
@EtanReisner假设我正在制作其他脚本的包装。 – Pithikos 2014-09-04 18:04:43