前言
今天碰到一个群友咨询一个问题,代码如下:
cat xxx | while read line;do
read -p "y|n:" yn
echo $yn
echo $line
done
他的目标预期是,循环体里的read
可以接收来自键盘的输入。
但是,实际情况是,循环体里的read
自动接收了xxx
的数据。
原因
read
默认是从标准输入里接收数据,因此两个read
均采用了默认行为。
解决
修改循环体外read
的默认输入源,变更为其它文件描述符。
代码如下:
while read -u 6 line;do
read -p "y|n:" yn
echo $yn
echo $line
done 6<xxx