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

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

我有一个bash脚本,如下所示,

cat filename | while read linedo
    read input;
    echo $input;done

但这显然没有给我正确的输出,因为当我在while循环中读取它时,它试图从文件文件名读取,因为可能的I / O重定向。

还有其他方法吗?


守着一只汪
浏览 611回答 3
3回答

小怪兽爱吃肉

您可以将常规stdin重定向到单元3以保持将其放入管道中:{&nbsp;cat&nbsp;notify-finished&nbsp;|&nbsp;while&nbsp;read&nbsp;line;&nbsp;do &nbsp;&nbsp;&nbsp;&nbsp;read&nbsp;-u&nbsp;3&nbsp;input &nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"$input"done;&nbsp;}&nbsp;3<&0顺便说一句,如果你真的使用cat这种方式,用一个重定向替换它会变得更容易:while&nbsp;read&nbsp;line;&nbsp;do &nbsp;&nbsp;&nbsp;&nbsp;read&nbsp;-u&nbsp;3&nbsp;input &nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"$input"done&nbsp;3<&0&nbsp;<notify-finished或者,您可以在该版本中交换stdin和unit 3 - 使用单元3读取文件,然后单独保留stdin:while&nbsp;read&nbsp;line&nbsp;<&3;&nbsp;do &nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;read&nbsp;&&nbsp;use&nbsp;stdin&nbsp;normally&nbsp;inside&nbsp;the&nbsp;loop &nbsp;&nbsp;&nbsp;&nbsp;read&nbsp;input &nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"$input"done&nbsp;3<notify-finished

慕侠2389804

尝试像这样改变循环:for&nbsp;line&nbsp;in&nbsp;$(cat&nbsp;filename);&nbsp;do &nbsp;&nbsp;&nbsp;&nbsp;read&nbsp;input &nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$input;done单元测试:for&nbsp;line&nbsp;in&nbsp;$(cat&nbsp;/etc/passwd);&nbsp;do &nbsp;&nbsp;&nbsp;&nbsp;read&nbsp;input &nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$input; &nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"[$line]"done
打开App,查看更多内容
随时随地看视频慕课网APP