来自 shell 脚本内部的 nohup 命令正在阻止脚本执行
nohup commands from inside shell script are blocking script exeuction
我有一个如下所示的 shell 脚本,我想用它以非阻塞方式执行一系列命令,即一旦执行 for 循环中的命令之一,我希望脚本继续执行下一个命令。
#!/bin/bash
declare -a parameters=("param1" "param2" "param3")
for parameter in "${parameters[@]}"
do
command="nohup mycommand -p ${parameter} 1> ${parameter}_nohup.out 2>&1 &"
${command}
done
但是,对于每个命令,脚本都会阻塞,直到它完成执行,然后再继续 for 循环的下一次迭代以执行下一个命令。此外,命令的输出被重定向到 nohup.out
而不是我指定的文件名来记录输出。为什么 shell 脚本中 nohup 的行为不同?
我的发行版是 Debian GNU/Linux 8 (jessie)
按照您尝试的方式执行命令时,重定向和 &
字符失去了它们的特殊含义。
这样做:
#!/bin/bash
declare -a parameters=("param1" "param2" "param3")
for parameter in "${parameters[@]}"
do
nohup mycommand -p $parameter 1> ${parameter}_nohup.out 2>&1 &
done
我有一个如下所示的 shell 脚本,我想用它以非阻塞方式执行一系列命令,即一旦执行 for 循环中的命令之一,我希望脚本继续执行下一个命令。
#!/bin/bash
declare -a parameters=("param1" "param2" "param3")
for parameter in "${parameters[@]}"
do
command="nohup mycommand -p ${parameter} 1> ${parameter}_nohup.out 2>&1 &"
${command}
done
但是,对于每个命令,脚本都会阻塞,直到它完成执行,然后再继续 for 循环的下一次迭代以执行下一个命令。此外,命令的输出被重定向到 nohup.out
而不是我指定的文件名来记录输出。为什么 shell 脚本中 nohup 的行为不同?
我的发行版是 Debian GNU/Linux 8 (jessie)
按照您尝试的方式执行命令时,重定向和 &
字符失去了它们的特殊含义。
这样做:
#!/bin/bash
declare -a parameters=("param1" "param2" "param3")
for parameter in "${parameters[@]}"
do
nohup mycommand -p $parameter 1> ${parameter}_nohup.out 2>&1 &
done