如何使用‘exec’调用其他shell脚本后继续执行该shell脚本?

如何使用‘exec’调用其他shell脚本后继续执行该shell脚本?

我有一个脚本:

ACTION="build"

env -i
exec ./makelib.sh Release "${ACTION}"

env -i
exec ./makelib.sh Debug "${ACTION}"

第二个 exec 没有执行。为什么?我该如何执行它?

答案1

exec 将用您传入的命令的内容替换整个过程——在本例中为 makelib.sh。查看Linux exec 函数的手册页——它对此进行了深入的解释。

我假设这是一个 shell 脚本;如果您希望脚本简单地按顺序(一个接一个)运行其他脚本,您可以使用:

ACTION="build"

env -i
./makelib.sh Release "${ACTION}"
./makelib.sh Debug "${ACTION}"

这将./makelib.sh Release "${ACTION}"首先运行;完成后,它将运行./makelib.sh Debug "${ACTION}"。如果您希望两个命令并行(同时)运行,则可以使用在后台运行该进程&

ACTION="build"

env -i
./makelib.sh Release "${ACTION}" &
./makelib.sh Debug "${ACTION}" &

请记住,后台两个进程意味着您将同时运行(和输出!)两个进程。因此,如果您有日志输出,您的屏幕至少会变得混乱。

希望这可以帮助!

答案2

exec 正在用传递的命令替换当前 shell。如果希望脚本继续,请删除 exec 语句。

答案3

如果您希望它在后台运行,那么在行尾添加“&”字符怎么样?或者如果您希望第二个语句以第一个语句成功为条件,那么在第一个和第二个语句之间添加“&&”怎么样?

(我的 shell-fu 很弱,因此出于教育目的,我很想听听为什么这可能是错误的。)

相关内容