3

При отправке запроса POST на сервер, который требует аутентификации пользователя и пароля, Terminal.app отображает мигающий значок ключа, который, я считаю , не является Unicode.

Введите пароль хоста для пользователя 'bucaran'

Когда я просил пользователя ввести разумную информацию в моем собственном сценарии, я мог проверить, является ли TERM_PROGRAM Apple_Terminal , но я не знаю, как отобразить мигающий значок.

1 ответ1

8

Изображение «ключа» - это не символьный символ, а пользовательская форма курсора, которую рисует терминал.

Терминал отображает эту специальную форму курсора всякий раз, когда он выглядит так, как будто пользователя просят ввести пароль или аналогичные конфиденциальные данные. Помимо отображения этого курсора, он ограничивает клавиатуру римскими методами ввода, чтобы избежать непреднамеренного отображения методом ввода конфиденциальной информации в виде встроенного текста или в другом окне. Это ведет себя как стандартное текстовое поле пароля OS X.

Терминал входит в этот режим, когда видит, что устройство TTY настроено на канонический (он же «приготовленный») режим и эхо-символы отключены. В этой конфигурации пользовательский ввод не отображается, и только буфер ввода устройства TTY будет видеть символы, пока вы не введете Return, чтобы отправить его в прикладную программу. Это гарантирует, что ни устройство TTY, ни прикладная программа не смогут отображать пользовательский ввод при вводе текста, поэтому эта конфигурация обычно используется только для чтения конфиденциальной информации.

Вы можете увидеть это в действии в Bash, запустив

stty -echo && echo Tell me your secrets: && cat; stty echo

stty -echo отключает эхо-символ TTY, а когда Bash запускает команду, он включает канонический режим, поэтому следующая команда cat будет работать в режиме «пароля». cat будет отображать каждую строку ввода, пока вы не введете Control - D. stty echo снова включает его после выхода cat .

Обратите внимание, что сценарий оболочки может просто использовать read -s для чтения с TTY в этом режиме, например,

while read -sp 'Tell me your secrets: '; do echo; echo $REPLY | vis; done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .