Files

如何從文件中讀取命令?

  • September 16, 2017

我有一些php按順序執行的腳本,例如:

php index.php import file1 --offline &&
php index.php import file2 --deleteUnused &&
php index.php import file3

現在我新發現了該parallel命令,並嘗試了類似的方法:

parallel -j 3 -- "php index.php import file1 --offline" "php index.php import file2 --deleteUnused" "php index.php import file3"

而且效果很好。

我是否有可能擁有一個包含所有上述命令的文件,並從parallel一個從文件中讀取命令的選項開始?

像這樣的東西:

parallel -XX myFileWithCommands.txt

創建myFileWithCommands.txt

php index.php import file1 --offline
php index.php import file2 --deleteUnused
php index.php import file3

然後像這樣並行執行:

parallel -j 3 -- < myFileWithCommands.txt

好吧,我可以想像有兩種簡單的方法可以實現這一點。您可以將文件的內容通過管道傳輸到parallel中,也可以編寫一個 shell 腳本。如果您只想完成這組特定的任務,那麼 shell 腳本可能更有意義。它會很短,很甜美,也很中肯:

#!/bin/sh
parallel -j 3 -- "php index.php import file1 --offline" "php index.php import file2 --deleteUnused" "php index.php import file3"

現在,如果您想要更通用的東西(即,您可以將多組命令作為一個組載入),那麼提出一個簡單的文件格式然後通過管道傳輸文件的內容可能會更容易進入parallel.

最簡單的方法是,如果您的文本包含您希望執行的逐字命令。

例如,如果這是您的文本文件 ( test.txt):

"php index.php import file1 --offline" "php index.php import file2 --deleteUnused" "php index.php import file3"

然後,您可以執行以下命令,它可能會正常工作:

$ cat test.txt | parallel -j 3 -- 

您還可以嘗試使用稍微複雜一些的文件格式(例如,每個命令都在一個新行上,並且不被引號包圍)。如果您要走這條路,則需要先對文件進行一些小的解析,然後再將其傳輸到該文件,parallel這可以很容易地完成,例如awk.

但是,如果您決定創建一個更靈活的文件格式,那麼創建一個幫助您不必awk '<whatever patterns you match> { do something }' | parallel -j3 --每次都鍵入的 shell 腳本(或函式)可能會有所幫助。

引用自:https://unix.stackexchange.com/questions/140428