来自heredoc的标准输入没有打印到屏幕上?

Posted

技术标签:

【中文标题】来自heredoc的标准输入没有打印到屏幕上?【英文标题】:stdin from heredoc not printing to screen? 【发布时间】:2021-11-10 02:22:48 【问题描述】:

我有一个以交互方式登录用户的程序。我使用 heredoc 来自动化这个过程。

./login <<EOF
user1@test.com
password
EOF

我期待输出会是这样的。这是我在没有 heredoc 的情况下运行程序并自己输入用户名和密码时显示的内容。

$ ./login
Enter your email: user1@test.com
Enter your password: password
Successfully logged in.

但是,我只看到了这个。

$ ./login
Enter your email: 
Enter your password: 
Successfully logged in.

如您所见,所有的heredoc 输入都没有打印出来,即使程序似乎正确地获取了标准输入。这是什么原因?如果我仍然可以看到这些输入来帮助我调试问题,那就太好了。谢谢。

【问题讨论】:

你标记了 bash 和 zsh;你是用一个,另一个,还是两者都用? (看起来你的./login 脚本只会使用一个...... 看到输入回显到终端是一种特殊情况,当终端本身标准输入时。标准输入通常不会得到回显。 【参考方案1】:

login 程序禁用本地回显(请​​参阅https://man7.org/linux/man-pages/man1/stty.1.html)。

更新

如果login这个程序是你写的,那就简单多了,只要echo读出来的值就行了

【讨论】:

登录程序是我写的。我没有任何代码来禁用回声。它只是从标准输入读取。【参考方案2】:

ECHO 是用户手动向 tty 键入字符时 tty 的一项功能。您的 ./login &lt;&lt; ... 没有从 tty 获得输入,因此不会回显 heredoc。就像,例如,

grep something < /some/file

您不希望它回显整个文件的数据。

【讨论】:

以上是关于来自heredoc的标准输入没有打印到屏幕上?的主要内容,如果未能解决你的问题,请参考以下文章

sed 命令编辑文本

重定向期望标准输入产生调用

Shell篇之八 输入输出重定向

编写一个从标准输入读取并打印到标准输出的 c 程序,没有内置的行长限制

请问ABAP中,如何从标准屏幕上获取到选择屏幕中一个字段的输入值。可以举个例子吗?这里感谢大家了。

C++进阶教程:如何获取用户输入