以下脚本片段为选项卡中的每个条目启动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循环兼容(或实现相同的效果)是什么?
答案 0 :(得分:2)
失去;
for t in $tabs; do /shared/sqoopToHdfs.sh $t >$t.out 2>&1 & done
答案 1 :(得分: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
(使用这种形式,你从来没有遇到过问题!)
答案 2 :(得分:2)
在最后添加&
for t in $tabs; do /shared/sqoopToHdfs.sh $t >$t.out 2>&1 & done
我不知道你希望这些运行多长时间,但它们都将被绑定到终端,你可以在这样做之后废弃这个过程,以便在你关闭那个终端时让它们保持活着
disown PID
答案 3 :(得分:1)
怎么样:
pins=""
for t in $tabs; do
nohup /shared/sqoopToHdfs.sh $t >$t.out 2>&1 &
pins="$!,$pins"
done