當然可以。假設這是input.txt
:
source1.txt dest1.txt
source2.txt dest2.txt
...
而要做到這一點:
command source1.txt dest1.txt
command source2.txt dest2.txt
...
這裏有一個辦法:
while read i o; do
command $i $o
done < input.txt
這假定命令command
已經構建讀取從它的第一爭論並寫入第二個。如果command
改爲打印到標準輸出(即,到終端屏幕),則將command $i $o
替換爲command $i > $o
。這也假定input.txt
中沒有空格或有趣的字符。
如果您的input.txt
包含例如百萬行或多個:
awk '{printf "command %s\n", $0}' input.txt | sh
或者,如果你必須使用command $i > $o
:
awk '{printf "command %s > %s\n", $1, $2}' input.txt | sh
這種方法從input.txt中,並打印command source1.txt dest1.txt
線的第一線,command source2.txt dest2.txt
第二,等...然後它「管」(|
)這些命令sh,執行它們。
對於錯誤command
處理,嘗試:
while read i o; do
command $i $o || command2 $i $o >> command2.log
done < input.txt 2> error.log
或者:
done <input.txt> error.log 2>&1
(其中之一將更好地工作,這取決於是否command
和command2
打印他們的錯誤到標準輸出(1)或者stderr(2)。)
謝謝韋伯,我試過它有效。但是我在某些命令中失敗了,是否有任何方法可以檢查結果,如果失敗了,我們應該在其中輕微修改來運行命令。每條命令執行完日誌詳細信息後都會加載到日誌文件中。像下面一樣讀到i o;做 命令$ I $Ø \t如果結果(好) \t下一個迭代 \t其他 \t命令2 $ I $Ø 做< input.txt >輸出log.txt的 – Hemanth
加入請求的錯誤處理 – webb