我有一個檔案(file1.txt),看起來像
0,100,500
0,200,300
etc.
對于每一行,我需要運行一個程式,該程式將使用其中一些資料作為引數。
因此我寫道:
while IFS=',' read -r parameter1 parameter2 parameter3; do
/path/to/program/./program.bin -arg2 "$parameter2" -arg3 "$parameter3"
done < file1.txt
運行腳本時,程式啟動但它掛起并且完全沒有回應。
有趣的是,當這樣做時:
while IFS=',' read -r parameter1 parameter2 parameter3; do
echo /path/to/program/./program.bin -arg2 "$parameter2" -arg3 "$parameter3" >> commands.txt
done < file1.txt
接著
bash -i commands.txt
有用。程式正常啟動,完成然后再次運行。
我沒有任何 IT 方面的背景,我不明白我做錯了什么。請原諒我使用的詞匯量不夠。
uj5u.com熱心網友回復:
通常,如果回圈體可以從某個檔案描述符(在本例中為標準輸入)讀取,則最好為命令使用不同的檔案描述符read。
# Assuming program.bin does not read from file descriptor 3.
while IFS=',' read -r parameter1 parameter2 parameter3 <&3; do
/path/to/program/./program.bin -arg2 "$parameter2" -arg3 "$parameter3"
done 3< file1.txt
uj5u.com熱心網友回復:
去看看chepner的答案,它以更直接的方式解決了問題。
您的程式很可能是從標準輸入讀取的。您file.txt被重定向到標準輸入,因此read您的程式和您的程式都將嘗試從檔案中讀取。您必須強制您的程式讀取不同的輸入或根本不讀取。
while IFS=',' read -r parameter1 parameter2 parameter3; do
# /dev/null cannot be read from:
/path/to/program/./program.bin -arg2 "$parameter2" -arg3 "$parameter3" </dev/null
done < file1.txt
while IFS=',' read -r parameter1 parameter2 parameter3; do
# read user input from console:
/path/to/program/./program.bin -arg2 "$parameter2" -arg3 "$parameter3" </dev/tty
done < file1.txt
while IFS=',' read -r parameter1 parameter2 parameter3; do
# ":" builtin doesn't produce any output
: | /path/to/program/./program.bin -arg2 "$parameter2" -arg3 "$parameter3"
done < file1.txt
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/521557.html
標籤:linux重击壳
上一篇:使用bash替換檔案中的字串
