我有一個bash腳本來源於另一個文件的內容。其他文件的內容是我想要執行的命令並比較返回值。有些命令有多個命令,用分號(;)或和號(& &)分隔,我似乎無法完成這項工作。在這方面努力,我創建了一些測試腳本,如下所示:BASH帶多個命令和可重入的變量
test.conf是文件通過測試
實施例1(本作品)被採購,我的輸出是差分2秒
test.conf
CMD[1]="date"
test.sh
. test.conf i=2 echo "$(${CMD[$i]})" sleep 2 echo "$(${CMD[$i]})"
例2(不工作) test.conf(如上相同的腳本)
CMD[1]="date;date"
實施例-3(試過,它不起作用或者) test.conf(同上腳本)
CMD[1]="date && date"
我不t希望我的變量CMD在tick標記內,因爲這樣,這些命令將在調用源代碼時執行,我看不出重新評估該變量的方法。
這個劇本基本上是在通1調用CMD來檢查一番,如果傳遞1,我得到一個錯誤的讀數,我做了一些工作,在腳本來糾正的錯誤讀取和重新執行&重新評估的輸出CMD;通過-2。
這裏是一個例子。在這裏我正在檢查SSHD是否在運行。如果我在通過1時評估CMD [1]時沒有運行,我將啓動它並重新評估CMD [1]。
test.conf
CMD[1]=`pgrep -u root -d , sshd 1>/dev/null; echo $?`
所以,如果我修改爲我的測試腳本,然後test.conf變爲: 注意:刻度線沒有顯示出來,但它是我的鍵盤下面的〜關口的關鍵。
CMD[1]=`date;date` or `date && date`
我的劇本是這樣的(處理刻度線)
. test.conf i=2 echo "${CMD[$i]}" sleep 2 echo "${CMD[$i]}"
我得到儘管延遲2秒打印兩次相同的日期/時間。因此,CMD沒有得到重新評估。
你的問題是不明確的 - 實際上,我沒有看到這個問題。你究竟想要做什麼,哪裏出錯?你的「示例」,「test.conf CMD [1] = pgrep -u」......使得寶貴的意義不大 - 「源文件」在哪裏?你如何解析參數 - 你看到引號時缺少引號? – 2009-07-13 18:28:33
這是一個測試腳本,而不是實際的。因此,$ i的原因仍然存在(切除 - 過去),這是不明確的。其中x = 0 ... 10的CMD [x]是返回1或0的測試條件;主要是這個過程是否正在運行,與上面給出的pgrep例子類似。除了CMD,我還有一個相應的RESTART [x],在我調用它之後,我重新評估CMD [x]以查看進程是否重新啓動。在其他示例中,我正在檢查是否存在日誌文件。我不想讓這些細節討論這個論壇,但它可能會有幫助。 謝謝! – Eric 2009-07-14 12:16:42