2014-03-19 46 views
0

當我嘗試從文件讀取一些行並逐個執行它們時,我遇到了bash shell腳本中的問題。當該行有空格參數時會發生此問題。代碼:從bash中的文件讀取並執行帶有空格的行

while read i 
do 
    $i 
done < /usr/bin/tasks 

任務文件:

mkdir Hello\ World 
mkdir "Test Directory" 

上述兩個指令很好地工作,當從終端,僅創建兩個目錄名爲「Hello World」的分別「測試指南」直接執行,但當從腳本讀取並執行指令時不會發生同樣的情況,這意味着創建了四個目錄。儘管如此,我想保持我的代碼儘可能簡單,如果可能的話,我寧願不使用cat命令。預先感謝您的幫助。

+1

這裏你真正的目標是什麼?如果您想添加日誌記錄,錯誤處理等,那麼有更好的方法來完成它。 –

+0

http://mywiki.wooledge.org/BashFAQ/050 – tripleee

回答

3

儘可能簡單?您正在重新實現.(或source,作爲bash讓你拼寫)命令:

. /usr/bin/tasks 

source /usr/bin/tasks 

要一次執行一條線,使用eval

while IFS= read -r i; do 
    eval "$i" 
done 

這假定該文件的每一行包含一個可以單獨執行的一個或多個完整命令。

+0

代碼編輯。無論如何,任何想法如何解決與空間問題? – user3437174

+0

空間不應該有問題。如果在命令行中鍵入'/ usr/bin/tasks'中的命令時,它們應該可以工作,只需簡單地輸入文件即可。 – chepner

+0

簡單地採購文件工作得很好,但我真的需要使用while循環來從文件任務中一次執行一行(如果以前我沒有提到,很抱歉)。那可能嗎? – user3437174