1

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

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

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

4

4 回答 4

2

失去;

for t in $tabs; do /shared/sqoopToHdfs.sh $t >$t.out 2>&1 & done
于 2013-07-01T21:41:37.080 回答
2

如果你想把它写在一行上:(和号后面没有分号):

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

(使用这种形式,您永远不会遇到问题!)

于 2013-07-01T21:41:40.873 回答
2

&在末尾添加一个

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

我不确定您希望这些运行多长时间,但它们都将绑定到终端,如果您关闭该终端,您可以在这样制作后拒绝该过程以使它们保持活力

disown PID

于 2013-07-01T21:45:52.660 回答
1

怎么样 :

 pins=""
 for t in $tabs; do 
    nohup /shared/sqoopToHdfs.sh $t >$t.out 2>&1 & 
    pins="$!,$pins"
 done
于 2013-07-01T23:25:21.990 回答