[英]In bash, Loop and send commands to execute
我試圖基於我正在讀取的文件執行程序並向其發送命令,但是一旦我發送命令,循環停止..它必須與管道相關,但是如果有人可以解釋它們如何工作,我將不勝感激
碼:
function setValue{
echo "$1" > &9
}
mkfifo program.fifo
./program
exec 9 > program.fifo
while read value
do
setValue $value
done < file.csv
file.csv有8000行,但是程序在第一行之后停止...並完成執行而不會在csv的更多行上循環
通過使管道保持打開狀態以讀取循環,在讀取第一行之后循環不會結束,它可以繼續到文件末尾:
exec 9 <> program.fifo
從program.fifo
讀取什么? 如果沒有正在讀取的進程,則您的腳本將被阻止嘗試寫入。 在某些進程正在讀取fifo之前,該寫入將不會完成。
我的猜測是,您在while循環中未顯示的代碼正在消耗其所有stdin,這與while循環的輸入相同。 避免這種情況的最干凈方法是確保循環中的命令不會從與循環相同的文件中讀取。 有很多方法可以做到這一點。 我喜歡:
while read value; do {
commands
} < /dev/null
done < file.csv
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.