#bash #zsh #heredoc
Вопрос:
У меня есть программа, которая интерактивно регистрирует пользователя. Я использовал 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 не распечатаны, хотя программа, похоже, правильно вводит stdin. В чем причина этого? Было бы здорово, если бы я все еще мог видеть эти входные данные, которые помогли бы мне отлаживать проблемы. Спасибо.
Комментарии:
1. Вы отметили как bash, так и zsh; используете ли вы одно, другое или оба? (Казалось бы, ваш
./login
сценарий будет использовать только один…2. Видеть, как вход отражается на терминале, — это особый случай, когда сам терминал является стандартным входом. Стандартный ввод в целом не отражается эхом.
Ответ №1:
login
Программа отключает локальное эхо (см. https://man7.org/linux/man-pages/man1/stty.1.html).
Обновить
Если login
программа написана вами, то это намного проще, просто echo
значения после их прочтения
Комментарии:
1. Программа входа в систему написана мной. У меня нет кода, чтобы отключить эхо. Это только чтение из stdin.
Ответ №2:
ECHO — это функция tty, когда пользователи вручную вводят символы в tty. Вы ./login << ...
не получаете входные данные от tty, поэтому heredoc не повторяется. Это так же, как, например,
grep something < /some/file
где вы не хотите, чтобы он повторял данные всего файла.