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

时间:2012-07-27 11:58:24

标签: shell unix exit command-execution

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

我想找到像

这样的解决方案
#!/bin/sh
ls -l ~/.
exit $?
touch ~/abc.txt

这里我希望命令touch ~/abc.txtexit $?运行后执行,命令touch ~/abc.txt可以是任何命令。

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

我不确定是否有解决方案,但感谢任何帮助。

4 个答案:

答案 0 :(得分:10)

典型的方法是设置陷阱:

trap 'touch ~/abc.txt' 0

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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