我想從文本文件中讀取命令並從bash腳本執行每一行。執行行從文件中bash
#!/bin/bash
while read line; do
$line
done < "commands.txt"
在某些情況下,如果$line
包含旨在在後臺運行的命令,如command 2>&1 &
他們不會在後臺啓動,並會在當前腳本上下文中運行。
任何ideea爲什麼?
我想從文本文件中讀取命令並從bash腳本執行每一行。執行行從文件中bash
#!/bin/bash
while read line; do
$line
done < "commands.txt"
在某些情況下,如果$line
包含旨在在後臺運行的命令,如command 2>&1 &
他們不會在後臺啓動,並會在當前腳本上下文中運行。
任何ideea爲什麼?
如果你所有的命令都在「commands.txt」裏面,實際上你可以把它叫做shell腳本。這就是爲什麼你可以源代碼或運行它像正常,即chmod u + x,那麼你可以使用它執行sh commands.txt
我沒有任何東西可以添加到ghostdog74的答案正確的方式來做到這一點,但我可以解釋爲什麼它會失敗:shell在執行可變擴展之前解析I/O重定向,後臺處理和其他一些事情,因此在替換時,將2>&1
和&
識別爲其他任何內容太遲比參數command
。
您可以通過使用eval "$line"
來改善這一點,但即使在那裏您也會遇到多行命令的問題(例如while循環,if blocks等)。 source
和sh
方法沒有這個問題。
是否有一些原因,你不能只做「source commands.txt」而不是編寫自己的循環? – 2010-08-28 01:17:50
「來源」是做什麼的?我正在嘗試現在測試 – Quamis 2010-08-28 01:20:11
請參閱[BashFAQ/050](http://mywiki.wooledge.org/BashFAQ/050)。然後像Jim Lewis所說的那樣使用'source'(或'.')。 'source'幾乎可以解決你問題中的第一句話。 – 2010-08-28 01:24:01