7

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

我想为类似的事情找到解决方案

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

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

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

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

4

4 回答 4

10

典型的做法是设置陷阱:

trap 'touch ~/abc.txt' 0

这将在 shell 退出时调用 touch 命令。在某些 shell(例如bash)中,如果脚本因信号而终止,陷阱也会被执行,但在其他shell(例如 )中dash则不会。只有当最后一个命令是exit.

于 2012-07-27T13:39:30.657 回答
1

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

于 2012-07-27T12:11:10.023 回答
0

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

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

于 2012-07-27T12:03:30.197 回答
0

这应该可以工作,即使 OP 不想移动出口。

#!/bin/sh
ls -l ~/.
RES=$?     #save res for later.
touch ~/abc.txt
exit $RES
于 2017-11-30T20:26:04.223 回答