我有一个脚本:
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 很弱,因此出于教育目的,我很想听听为什么这可能是错误的。)