在&ampersand背景中运行bash管道命令

Tat*_*ata 14 bash shell

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 `;'
Run Code Online (Sandbox Code Playgroud)

什么是上述命令中的语法错误?我也试过使用{}并结束了管道命令;.但同样的错误出现了......

Fre*_*Foo 21

如果要在后台并行运行所有作业,则应将其&置于内部().

time for i in `ls /tmp/chunk*`; do
  (cat $i | tr ' ' '\n' | sort | uniq > /tmp/line${i:10} &)
done
Run Code Online (Sandbox Code Playgroud)

  • 这是因为 & 和 ; 都是命令分隔符:[http://stackoverflow.com/questions/12034909/why-do-i-get-unexpected-token] (2认同)

Ica*_*By0 20

你可以包括&在护腕中:

time for i in `ls /tmp/chunk*`; do
  {(cat $i | tr ' ' '\n' | sort | uniq > /tmp/line${i:10}) &};
done
Run Code Online (Sandbox Code Playgroud)

  • @Tathagata:你可以通过这个答案给海报10名代表. (4认同)

pix*_*eat 12

&是一个分隔符,因此是多余的; IE删除最终;

for i in /tmp/chunk*; do tr ' ' '\n' <$i | sort -u > /tmp/line${i:10}& done
Run Code Online (Sandbox Code Playgroud)

  • +1用于删除无用的cat和`sort -u` (2认同)