Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash脚本的循环中使用nohup_Bash_Shell_Loops_Unix_Nohup - Fatal编程技术网

在bash脚本的循环中使用nohup

在bash脚本的循环中使用nohup,bash,shell,loops,unix,nohup,Bash,Shell,Loops,Unix,Nohup,我有一个bash脚本,它包含子目录列表上的循环。在循环Icd的每个子目录中,使用nohup运行命令,然后cd退出。在下面的示例中,为了简单起见,我将可执行文件替换为echo命令 #!/bin/bash dList=("dname1" "dname2" "dname3") for d in $dList; do cd $d nohup echo $d & cd .. done 上述情况会导致nohup在第一个循环期间挂起,输出如下: $ ./script.sh .

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

#!/bin/bash
dList=("dname1" "dname2" "dname3")
for d in $dList; do
    cd $d
    nohup echo $d &
    cd ..
done
上述情况会导致nohup在第一个循环期间挂起,输出如下:

$ ./script.sh
./dname1 
$ nohup: appending output to `nohup.out'
脚本不会在循环中继续,要在命令行上再次键入,必须按enter键。 好的,当在shell上使用它时,这是正常的
nohup
行为,但显然它对我的脚本不起作用。如何让
nohup
简单地运行,然后优雅地允许脚本继续

我已经(失败地)尝试了nohup命令的变体,包括

nohup echo $d < /dev/null & 
trap "" HUP
在脚本的顶部也是如此,但这也没有帮助。 请帮忙

编辑:@anubhava正确地指出,我的循环包含一个错误,导致脚本只使用数组中的第一个条目。这是正确的版本

#!/bin/bash
dList=("dname1" "dname2" "dname3")
for d in ${dList[@]}; do
    cd $d
    nohup echo $d &
    cd ..
done
所以现在脚本实现了我想要的。然而,我们仍然从nohup得到恼人的输出,这是我最初问题的一部分

问题在于:

for d in $dList; do
对于数组的第一个元素,它将只对循环运行一次

要在数组上迭代,请使用:

for d in ${dList[@]}; do

完整工作脚本:

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