从管道 shell 中的 tty 读取

从管道 shell 中的 tty 读取

我有一个像这样运行的脚本:

卷曲https://example.com/install.sh| zsh--

该脚本需要从 use 输入中读取:

read "human_name?Your human name ?"</dev/tty

问题是用户看到输入并可以输入他们的响应,但响应未存储在 human_name 中。

例子:

cat <<EOM | zsh -
read "human_name?Your human name ?"</dev/tty   
if [ -z "$human_name" ] ; then echo "tears" ; else echo "HI" $human_name; fi
EOM

结果是:

Your human name ?Pat
tears

有什么指导吗?

答案1

/dev/tty只要程序不是后台作业,您始终可以通过重定向从终端读取内容。如果它是后台作业,它将被 SIGTTIN 暂停,直到切换到前台。

您的脚本的问题不在于从终端读取内容,而在于您如何处理所读取的内容。您使用了带有插值的此处文档,因此$human_name在构建此处文档时进行了插值,并且当时它是空的。您需要使用不带插值的此处文档或引用美元符号,以便您运行的 shellzsh -看到并解析它们。

猫<<“结束”| zsh--
阅读“ human_name?你的名字?”</dev/tty   
如果[-z“$ human_name”];然后回声“眼泪”;否则回显“嗨”$ human_name;菲
结束语

相关内容