如何在bash for循环中将程序启动到后台

如何在bash for循环中将程序启动到后台,bash,Bash,以下脚本片段为选项卡中的每个条目启动shell脚本sqoopToHdfs.sh一次,但顺序如下: tabs="contracts employees resources" for t in $tabs; do /shared/sqoopToHdfs.sh $t >$t.out 2>&1 ; done 但以下同时启动所有这些系统的尝试不起作用: 那么,在后台启动与for循环兼容的正确语法是什么(或者实现相同的效果)?丢失 for t in $tabs; do /shared/

以下脚本片段为选项卡中的每个条目启动shell脚本sqoopToHdfs.sh一次,但顺序如下:

tabs="contracts employees resources"
for t in $tabs; do /shared/sqoopToHdfs.sh $t >$t.out 2>&1 ; done
但以下同时启动所有这些系统的尝试不起作用:


那么,在后台启动与for循环兼容的正确语法是什么(或者实现相同的效果)?

丢失

for t in $tabs; do /shared/sqoopToHdfs.sh $t >$t.out 2>&1 & done

丢失

for t in $tabs; do /shared/sqoopToHdfs.sh $t >$t.out 2>&1 & done

如果您想将其写在一行上:(符号后面不带分号):

顺便说一句,您应该使用更健壮的语法和数组:

tabs=( contracts employees resources)
for t in "${tabs[@]}"; do /shared/sqoopToHdfs.sh "$t" > "$t.out" 2>&1 & done
或者(完全一样):


(使用此表单,您从来没有遇到过问题!)

如果您想将其写在一行上:(符号后面没有分号):

顺便说一句,您应该使用更健壮的语法和数组:

tabs=( contracts employees resources)
for t in "${tabs[@]}"; do /shared/sqoopToHdfs.sh "$t" > "$t.out" 2>&1 & done
或者(完全一样):


(使用此表单,您从未遇到过问题!)

在末尾添加
&

for t in $tabs; do /shared/sqoopToHdfs.sh $t >$t.out 2>&1 & done
我不知道你想让它们运行多长时间,但是它们都会被绑定到终端上,你可以在它像这样运行后断开连接,如果你关闭终端,就可以让它们存活


断开PID

在末尾添加一个
&

for t in $tabs; do /shared/sqoopToHdfs.sh $t >$t.out 2>&1 & done
我不知道你想让它们运行多长时间,但是它们都会被绑定到终端上,你可以在它像这样运行后断开连接,如果你关闭终端,就可以让它们存活

断开PID

怎么样:

 pins=""
 for t in $tabs; do 
    nohup /shared/sqoopToHdfs.sh $t >$t.out 2>&1 & 
    pins="$!,$pins"
 done
那么:

 pins=""
 for t in $tabs; do 
    nohup /shared/sqoopToHdfs.sh $t >$t.out 2>&1 & 
    pins="$!,$pins"
 done

我如何将(捕获PID,否认PID)插入到一行中?有几个答案彼此相似。我将奖励这一个,因为“disown”有点重要,我以前没有考虑过。disown还可以作为命令的前缀,因此应该能够在
do
之后插入(捕获PID,disown PID)到一个行文中?有几个答案彼此类似。我会奖励这个,因为“disown”有点重要,我以前没有考虑过。disown也可以作为命令的前缀,所以应该能够在
do
之后插入“可能重复”的标题,即使根本问题是相同的,也无法找到我问题的答案。这没关系。这就是我们为您处理的原因。“可能重复”的标题在找到我问题的答案时不会有用——即使根本问题是相同的。这没关系。这就是我们为你处理这件事的原因。