使用bash我想讀取一行行並詢問用戶腳本是否應該在讀取每行時處理它。由於這兩行和用戶的響應來自標準輸入,如何協調文件句柄?一番搜索和審判後&錯誤,我想出了如何從標準輸入讀取數據並讀取用戶對每行數據的響應
exec 4<&0
seq 1 10 | while read number
do
read -u 4 -p "$number?" confirmation
echo "$number $confirmation"
done
這裏我們使用EXEC重開對文件句柄4標準輸入的例子,閱讀數字序列從管道標準輸入,並獲得用戶對文件的響應處理4.這似乎是太多的工作。這是解決這個問題的正確方法嗎?如果不是,那麼更好的方法是什麼?謝謝。
您可能會考慮更多地解釋它是如何發生的,即「行和用戶的響應來自標準輸入」。這聽起來像是一種奇怪的做生意的方式...... – 2012-08-13 16:45:52
從用戶的角度來看,命令需要像「rm -i *」那樣運行。 (有關腳本的博客文章位於[killmatching](http://calliopesounds.blogspot.com/2012/08/a-less-violent-killmatching.html)。)腳本需要在內部使用管道暴露給用戶。並且該腳本不應該由此需求給用戶帶來不便。 – 2012-08-15 17:57:56
我讀過你的博客文章,你完全想要從用戶的stdin中分離出內部stdin。這意味着使用兩遍。幸運的是,您的應用程序沒有性能問題。我已經更新了我的答案。 – 2012-08-16 16:21:27