shell脚本内部的nohup命令阻止脚本执行

时间:2017-04-07 22:16:10

标签: linux bash shell debian nohup

我有一个类似下面的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而不是我指定的文件名以记录输出。为什么nohup的行为在shell脚本中是不同的?

我的发行版是Debian GNU / Linux 8(jessie)

1 个答案:

答案 0 :(得分:2)

以您尝试的方式执行命令时,重定向和&字符将失去其特殊含义。

这样做:

#!/bin/bash
declare -a parameters=("param1" "param2" "param3")
for parameter in "${parameters[@]}"
do
   nohup mycommand -p $parameter 1> ${parameter}_nohup.out 2>&1 &
done