来自 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