2014-01-27 26 views
0

假設我希望運行目錄中的所有腳本。如果我做./*.sh,他們會在哪個訂單中運行?使用linux中的*命令運行文件

目錄: 1.sh 2.sh 3.sh

+1

你試過了嗎?結果是什麼? –

+0

看起來像一個'超級用戶'的問題..... – KevinDTimm

+2

@JimGarrison只是嘗試它,在這裏不夠。觀察到的輸出可能受到一些未知設置的影響。這絕對不是一個'-2'問題。只是嘗試一些東西,並推論這可以在所有其他機器上工作,這真的是不好的做法。 35k可憐的評論..但是什麼意思35k ..... :) – hek2mgl

回答

6

要運行所有腳本,你必須單獨運行它們:

for f in ./*; do 
    "$f" 
done 

格局將產生腳本,其中「字母」是由當前語言環境定義的字母順序排序列表。

你嘗試:

./* 

將擴大到符合條件的文件列表,其外殼會再當作一個命令。第一個腳本將被執行,剩下的腳本名作爲參數傳遞給第一個腳本。

+0

好答案!不會有這樣的預期。 – hek2mgl

6

他們按字母順序排序。從bash manual

字分開後,除非-f選項設置(見set內建),猛砸掃描字符每個單詞「*」,和「[」「?」。如果出現這些字符中的一個,則將該字視爲模式,並用符合該模式的按字母順序排列的文件名列表替換。

然而,爲了按預期運行它們,你會需要閱讀@chepners答案(感謝!我必須承認,我不會期望)

+0

現在您已知道默認順序,如果您想強制腳本以其他順序運行,那麼可以使用ls排序嘗試一些技巧。例如,按字母順序向後排序:「ls * .sh -r | xargs -I%bash%」或創建時間:「ls * .sh -t | xargs -I%bash%」 – Kevin