为了账号安全,请及时绑定邮箱和手机立即绑定

在while循环中读取bash中的输入

在while循环中读取bash中的输入

在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


查看完整回答
反对 回复 2019-08-12
?
慕侠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


查看完整回答
反对 回复 2019-08-12
  • 3 回答
  • 0 关注
  • 653 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信