2009-10-15 92 views
0

我書面方式一個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

很簡單,您可以使用wait暫停,直到所有進程退出。

wait: wait [n]
等待指定的進程並報告其終止狀態。如果未提供 N,則等待所有當前活動的子進程, 並且返回碼爲零。 N可以是進程ID或作業 規範;如果給出了工作規範,則等待作業的所有進程 。

Voilà!

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 
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