在 bash 脚本的循环中使用 nohup
Using nohup within a loop of a bash script
我有一个 bash 脚本,其中包含对子目录列表的循环。在循环中,我 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'
脚本不会继续循环,要在命令行中再次输入,必须按回车键。
好的,这是在 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
为数组的第一个元素循环一次。
要遍历数组,请使用:
for d in ${dList[@]}; do
完整的工作脚本:
dList=("dname1" "dname2" "dname3")
for d in "${dList[@]}"; do
cd "$d"
{ nohup echo "$d" & cd -; } 2>/dev/null
done
我有一个 bash 脚本,其中包含对子目录列表的循环。在循环中,我 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'
脚本不会继续循环,要在命令行中再次输入,必须按回车键。
好的,这是在 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
为数组的第一个元素循环一次。
要遍历数组,请使用:
for d in ${dList[@]}; do
完整的工作脚本:
dList=("dname1" "dname2" "dname3")
for d in "${dList[@]}"; do
cd "$d"
{ nohup echo "$d" & cd -; } 2>/dev/null
done