在未评估"读取行时"之后读取 (SHELL)



我目前正在调试我制作的一些脚本,但我找不到执行"读取"指令的方法。

总之,我有两个函数,一个带有在管道后调用的"while read lines",另一个函数在处理读取时读取用户输入。

现在让我用代码解释一下:

  • 这就是我调用函数的方式($lines包含多个用'\n'分隔的行(

echo"$lines"| saveLines

saveLines(){
# ...
while read line ; do
# processing lines
done
myOtherFunction
}
myOtherFunction(){
echo "I am here !" # <= This is printed in console
read -p "Type in : " tmp  # <= Input is never asked to user, and the message is not printed
echo "I now am here !" # <= This is printed in console
}

这个代码被简化了,但精神就在这里。我试图在"read-p…"之前插入"read"指令,它似乎并没有改变事情。。。

所以,如果你能展示我的错误,或者告诉我为什么会出现这种行为,我会很高兴。感谢您抽出时间

这个问题与另一个问题非常接近,上下文略有不同。更准确地说,正如OP所解释的,命令运行是

echo "$lines" | saveLines

这意味着saveLines执行的代码的标准输入不再是终端,而是与echo...命令的标准输出相同的描述符。

因此,为了解决这个问题,更换就足够了

…
read -p "Type in : " tmp
…

带有

…
read -p "Type in : " tmp </dev/tty
…

最新更新