在while循环中读取bash中的输入我有一个bash脚本,如下所示,cat filename | while read linedo
read input;
echo $input;done但这显然没有给我正确的输出,因为当我在while循环中读取它时,它试图从文件文件名读取,因为可能的I / O重定向。还有其他方法吗?
3 回答
小怪兽爱吃肉
TA贡献1852条经验 获得超1个赞
您可以将常规stdin重定向到单元3以保持将其放入管道中:
{ cat notify-finished | while read line; do read -u 3 input echo "$input"done; } 3<&0
顺便说一句,如果你真的使用cat
这种方式,用一个重定向替换它会变得更容易:
while read line; do read -u 3 input echo "$input"done 3<&0 <notify-finished
或者,您可以在该版本中交换stdin和unit 3 - 使用单元3读取文件,然后单独保留stdin:
while read line <&3; do # read & use stdin normally inside the loop read input echo "$input"done 3<notify-finished
慕侠2389804
TA贡献1719条经验 获得超6个赞
尝试像这样改变循环:
for line in $(cat filename); do read input echo $input;done
单元测试:
for line in $(cat /etc/passwd); do read input echo $input; echo "[$line]"done
添加回答
举报
0/150
提交
取消