我有一种情况,我在我的shell脚本中有一个命令必须在同一个脚本中执行退出命令后执行(我知道!!这听起来很疯狂! !)
我想找到像
这样的解决方案#!/bin/sh
ls -l ~/.
exit $?
touch ~/abc.txt
这里我希望命令touch ~/abc.txt
在exit $?
运行后执行,命令touch ~/abc.txt
可以是任何命令。
约束: 1)我无法修改上述脚本的exit $?
部分。 2)该命令必须仅在exit $?
命令后执行。
我不确定是否有解决方案,但感谢任何帮助。
答案 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