来自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 << ...
没有从 tty 获得输入,因此不会回显 heredoc。就像,例如,
grep something < /some/file
您不希望它回显整个文件的数据。
【讨论】:
以上是关于来自heredoc的标准输入没有打印到屏幕上?的主要内容,如果未能解决你的问题,请参考以下文章
编写一个从标准输入读取并打印到标准输出的 c 程序,没有内置的行长限制