繁体   English   中英

Shell脚本:在shell脚本中运行“exit”命令后执行命令

[英]Shell script: Execute command after running “exit” command in the shell script

我有一种情况,我在我的shell脚本中有一个命令,必须在同一个脚本中执行退出命令后执行( 我知道!!这听起来很疯狂!

我想找到类似的解决方案

#!/bin/sh
ls -l ~/.
exit $?
touch ~/abc.txt

在这里我想要命令touch ~/abc.txtexit $?后执行exit $? 已经运行并且命令touch ~/abc.txt可以是任何命令。

约束: 1)我无法修改exit $? 以上脚本的一部分。 2)命令必须在exit $?后才能执行exit $? 命令。

我不确定是否有解决方案,但任何帮助表示赞赏。

典型的方法是设置陷阱:

trap 'touch ~/abc.txt' 0

这将在shell退出时调用touch命令。 在某些shell(例如bash )中,如果脚本由于信号而终止,则也会执行陷阱,但在其他shell(例如dash )中则不会。 仅当最后一个命令exit才有可移植方式来调用该命令。

我不知道你为什么要这样做,但也许尝试这样的事情:将你的脚本包装在另一个中。 在您的父脚本中使用eval或source之类的命令评估您的子脚本,然后从您的子脚本最后一个命令中提取并以相同的方式单独执行它。

我怀疑直接的方式是否可行。

但是可能有一种解决方法:你可以将执行脚本包装在另一个进程中吗? 然后,一旦包装的脚本执行其exit()并从堆栈中删除,您就可以在包装脚本中调用任何所需的内容。

这应该有效,即使OP不想移动出口。

#!/bin/sh
ls -l ~/.
RES=$?     #save res for later.
touch ~/abc.txt
exit $RES

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM