我目前正在嘗試撰寫一個 bash 腳本,它使用一些輸入引數運行我的可執行檔案。大多數輸入引數在腳本內部設定,其中一些被傳遞給 bash 腳本并進行評估。我現在需要的是概括腳本,所以如果我想設定我的可執行檔案已知的其他輸入,那么我想將它們寫在 bash 腳本輸入中。換句話說,我的 bash 腳本在命令結束時執行:
./executable.o -L $1 -g $g -h $2 -w 0.01 -th $thread_num -m 0 -w 0.01 -r $r -op $operator -fun $4 -s $site -b 0 -scale 1 -ch 1 -mu 10 >& ${filename}.log
其中變數是根據輸入引數預先計算的。我將 bash 腳本運行為:
sh script.sh 14 0.8 0.05 0 3 0 16
(這也從另一個 bash 腳本呼叫,該腳本使用不同的輸入多次運行該腳本)。我的問題是我的可執行檔案知道很多不同的輸入/標志,例如 -hn、-hs、-gn、-gs、-dt,......我不想為每個人定義一個明確的輸入到腳本。另外,我有時想按原樣運行腳本,而不需要附加標志。有沒有辦法將bash腳本執行為:
sh script.sh 14 0.8 0.05 0 3 0 16 -hn 1 -hs 0.2 -dt 0.1
最后一個引數(-hn 1 -hs 0.2 -dt 0.1)移到可執行檔案的位置?我的可執行檔案還可以從 input.txt 中讀取標志,因此我可以將所有內容移動到 .txt 檔案中,但如果我要運行數百個這樣的腳本,那么我會對所有這些文本檔案造成混亂。我感謝任何幫助/建議!(更準確地說,bash 腳本是支持 jobarray 的集群上的運行器腳本,因此 script.sh 在 slurm 上作為作業陣列運行,但我認為這并不重要)我也在這里發布了真正的腳本萬一: https ://pastebin.com/xyF6ZbV8
uj5u.com熱心網友回復:
如果我理解正確,您在腳本中處理了 7 個引數,而所有其他引數都應該只提供給您可執行檔案?
嘗試這個:
./executable.o [... all your stuff ...] "${@:8}" >& ${filename}.log
評估您為 bash 腳本提供的"${@:8}"引數陣列,從位置 8 開始,以空格分隔。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/447744.html
