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

stdin from heredoc not printing to screen?

我有一个交互登录用户的程序。我使用 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 输入都没有打印出来,即使程序似乎正确地获取了标准输入。这是什么原因?如果我仍然可以看到这些输入来帮助我调试问题,那就太好了。谢谢

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

更新

如果login程序是你写的,那就简单多了,只需要echo阅读后的值

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

grep something < /some/file

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