前言
今天碰到一个群友咨询一个问题,代码如下:
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