Shell脚本:在shell脚本中运行“exit”命令后执行命令
我有一种情况,在我的shell脚本中有一个命令,必须在退出命令在同一脚本中执行后执行(我知道!!这听起来很疯狂!)Shell脚本:在shell脚本中运行“exit”命令后执行命令
我想找到像
#!/bin/sh
ls -l ~/.
exit $?
touch ~/abc.txt
这里的东西的解决方案我想命令touch ~/abc.txt
执行exit $?
运行后,命令touch ~/abc.txt
可任何命令。
限制条件: 1)我无法修改上述脚本的exit $?
部分。 2)命令必须在命令exit $?
后执行。
我不确定是否有解决方案,但任何帮助表示赞赏。
的典型方法是设置一个陷阱:
trap 'touch ~/abc.txt' 0
这将调用触摸命令shell退出时。在某些shell中(例如bash
),如果脚本因信号而终止,陷阱也将被执行,但在其他shell中(例如dash
)则不会。只有最后一条命令是exit
时,才有可调用该命令的便捷方式。
谢谢!这有助于。 – latestVersion 2012-07-30 09:32:31
我怀疑直接的方式是可能的任何方式。
但是可能有一种解决方法:您是否可以将执行脚本包装在另一个进程中?然后,一旦包装脚本执行了exit()并从堆栈中移除,就可以在包装脚本中调用任何你想要的东西。
我不知道你为什么要这样做,但也许尝试这样的事情:包装你的脚本在另一个。在您的父母脚本中使用eval或source等命令评估您的子脚本,然后从您的子脚本上次命令中提取并以相同的方式单独执行它。
+1:提取技巧使得这个答案比我的更好。 – arkascha 2012-07-27 12:11:58
尽我所能,我不能在脚本上使用包装器,因为我正在修改vFabric tcServer的“tcruntime-ctl.sh”脚本。 – latestVersion 2012-07-27 12:22:55
我现在只会修改这个脚本! :( – latestVersion 2012-07-27 12:24:18
即使OP不想移动出口,这也应该有效。
#!/bin/sh
ls -l ~/.
RES=$? #save res for later.
touch ~/abc.txt
exit $RES
请问我们为什么不能修改这些第一行? – arkascha 2012-07-27 12:07:11
对不起!我现在编辑了我的问题的约束部分。我可以更改脚本中的任何内容,但退出命令必须保留! – latestVersion 2012-07-27 12:20:51
如果你不能修改脚本,你期望添加'touch'命令吗?如果您可以修改脚本,为什么不能将它添加到'exit'之上? – Shahbaz 2012-07-27 12:25:42