time for i in `ls /tmp/chunk*`; do (cat $i | tr ' ' '\n' | sort | uniq > /tmp/line${i:10}) & ;done
bash: syntax error near unexpected token `;'
以上命令存在语法错误,请问是什么原因?我也尝试使用{}
,并以;
结束管道命令,但是出现了相同的错误提示...
如果你想要在后台并行运行所有作业,你应该将&
放在()
内。
time for i in `ls /tmp/chunk*`; do
(cat $i | tr ' ' '\n' | sort | uniq > /tmp/line${i:10} &)
done
您可以将&放在花括号中:
time for i in `ls /tmp/chunk*`; do
{(cat $i | tr ' ' '\n' | sort | uniq > /tmp/line${i:10}) &};
done
& 是一个分隔符,因此与 ; 重复了。也就是说,删除最后一个 ;
for i in /tmp/chunk*; do tr ' ' '\n' <$i | sort -u > /tmp/line${i:10}& done
{}
在当前 shell 上下文中执行。()
创建了一个新的子 shell,因此您不会保留变量赋值。 - Tathagata