在bash脚本的循环中使用nohup

fee*_*dMe 4 unix bash shell loops nohup

我有一个bash脚本,包含一个子目录列表循环.在循环内我cd进入每个子目录,运行命令nohup然后cd退出.在下面的示例中,echo为了简单起见,我已将命令替换为可执行文件.

#!/bin/bash
dList=("dname1" "dname2" "dname3")
for d in $dList; do
    cd $d
    nohup echo $d &
    cd ..
done
Run Code Online (Sandbox Code Playgroud)

以上结果导致nohup在第一个循环期间挂起,输出如下:

$ ./script.sh
./dname1 
$ nohup: appending output to `nohup.out'
Run Code Online (Sandbox Code Playgroud)

脚本不会继续循环,要在命令行上再次键入,必须按回车键.好的,这是nohup在shell上使用它时的正常行为,但显然它对我的脚本不起作用.我怎样才能nohup简单地运行然后优雅地允许脚本继续?

我已经(不成功)尝试了nohup命令的变种,包括

nohup echo $d < /dev/null & 
Run Code Online (Sandbox Code Playgroud)

但这没有帮助.此外,我尝试包括

trap "" HUP
Run Code Online (Sandbox Code Playgroud)

在脚本的顶部,但这也没有帮助.请帮忙!

编辑:正如@a​​nubhava正确指出我的循环包含一个错误,导致脚本只使用数组中的第一个条目.这是更正后的版本.

#!/bin/bash
dList=("dname1" "dname2" "dname3")
for d in ${dList[@]}; do
    cd $d
    nohup echo $d &
    cd ..
done
Run Code Online (Sandbox Code Playgroud)

所以现在脚本实现了我想要的.但是,我们仍然从nohup那里得到令人讨厌的输出,这是我原来问题的一部分.

anu*_*ava 6

问题在这里:

for d in $dList; do
Run Code Online (Sandbox Code Playgroud)

这只会for为数组的第一个元素运行一次循环.

迭代数组使用:

for d in ${dList[@]}; do
Run Code Online (Sandbox Code Playgroud)

完整的工作脚本:

dList=("dname1" "dname2" "dname3")
for d in "${dList[@]}"; do
   cd "$d"
  { nohup echo "$d" & cd -; } 2>/dev/null
done
Run Code Online (Sandbox Code Playgroud)