我有一个像这样运行的脚本:
卷曲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;菲 结束语