簡體   English   中英

在bash中,循環並發送命令以執行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM