Files
如何從文件中讀取命令?
我有一些
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 腳本(或函式)可能會有所幫助。