同时运行几个命令

时间:2009-10-15 04:49:19

标签: shell

我正在写一个shell脚本,我希望这些命令能够同时运行

find ./incoming/kontraktor/ -type f -name '*.html' | sort | awk 'NR % 3 == 1' | ./bin/foo.py -m 3 -b 1 | next_command >> log/foo_log.log 2>&1
find ./incoming/kontraktor/ -type f -name '*.html' | sort | awk 'NR % 3 == 2' | ./bin/foo.py -m 3 -b 2 | next_command >> log/foo_log.log 2>&1
find ./incoming/kontraktor/ -type f -name '*.html' | sort | awk 'NR % 3 == 0' | ./bin/foo.py -m 3 -b 3 | next_command  >> log/foo_log.log 2>&1

可以使用&让所有人同时奔跑?如果可能,只有在上述所有三个命令都完成执行后,才能运行以下命令输出日志吗?

tail log/foo_log

2 个答案:

答案 0 :(得分:2)

很简单,您可以使用wait暂停,直到所有进程都退出。

  

wait: wait [n]
      等待指定的进程并报告其终止状态。如果       没有给出N,所有当前活动的子进程都在等待,       并且返回码为零。 N可以是进程ID或作业       规格;如果给出了工作规范,那么工作中的所有流程都是如此       管道等待。

瞧!

find ./incoming/kontraktor/ -type f -name '*.html' | sort | awk 'NR % 3 == 1' | ./bin/foo.py -m 3 -b 1 | next_command >> log/foo_log.log 2>&1 &
find ./incoming/kontraktor/ -type f -name '*.html' | sort | awk 'NR % 3 == 2' | ./bin/foo.py -m 3 -b 2 | next_command >> log/foo_log.log 2>&1 &
find ./incoming/kontraktor/ -type f -name '*.html' | sort | awk 'NR % 3 == 0' | ./bin/foo.py -m 3 -b 3 | next_command  >> log/foo_log.log 2>&1 &
wait
tail log/foo_log

答案 1 :(得分:0)

我在搜索解决方案时看到this讨论,所以我想我会尝试回答我自己的问题XD

(find ./incoming/kontraktor/ -type f -name '*.html' | sort | awk 'NR % 3 == 1' | ./bin/foo.py -m 3 -b 1 | next_command >> log/foo_log.log 2>&1) &
(find ./incoming/kontraktor/ -type f -name '*.html' | sort | awk 'NR % 3 == 2' | ./bin/foo.py -m 3 -b 2 | next_command >> log/foo_log.log 2>&1) &
(find ./incoming/kontraktor/ -type f -name '*.html' | sort | awk 'NR % 3 == 0' | ./bin/foo.py -m 3 -b 3 | next_command  >> log/foo_log.log 2>&1) &
wait