簡體   English   中英

如何使用 gnu_parallel 運行多個可執行和/或 bash 腳本?

[英]How to use gnu_parallel to run multiple executable and/or bash scripts?

我最近一直在嘗試以一種比打開多個終端實例並分別在腳本中執行更方便的方式並行運行我的腳本。

過去幾天我一直在嘗試學習如何使用 gnu_parallel ,但我仍然有點無能為力,希望有人能提供一個直接的例子。

假設我有一個名為 blah.exe 的 g++ 編譯代碼和一個名為 blah.sh 的 bash 腳本,它們可以完美地單獨運行,但我想在不同的目錄中執行它們。

我一直在閱讀https://www.gnu.org/software/parallel/man.html#EXAMPLE:-Working-as-xargs--n1.-Argument-appending

https://www.biostars.org/p/182136/

但我對語法並不完全清楚

要連續運行這些,我會這樣做:

for i in 1 2 3 4
mv ./blah.exe directory$i
cd directory$i
./blah.exe all
cd ..
end

相似地

for i in 1 2 3 4
mv ./blah.sh directory$i
cd directory$i
source ./blah.sh all
cd ..
end

我試圖理解如何在一個命令中使用並行將此負載拆分為 4 個邏輯線程。

有人可以為此提供一個例子嗎?

感謝您的時間。

就像是:

parallel --dry-run 'cd directory{}; ../blah.exe all; source ../blah.sh all' ::: {1..4}

無需復制/移動可執行文件,只需運行相同的即可。

無需cd ..之后,因為每次都是一個新進程。

請注意,這不是多線程,而是多處理。


如果要處理不連續的目錄號碼,可以使用:

parallel ... ::: {1..4} 6 7 {11..14}

如果要處理所有目錄,可以使用:

printf "%s\0" */ | parallel -0 'cd {}; pwd' 

如果要處理所有以FRED開頭的目錄,可以使用:

printf "%s\0" FRED*/ | parallel -0 'cd {}; pwd' 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM