Изображение «ключа» - это не символьный символ, а пользовательская форма курсора, которую рисует терминал.
Терминал отображает эту специальную форму курсора всякий раз, когда он выглядит так, как будто пользователя просят ввести пароль или аналогичные конфиденциальные данные. Помимо отображения этого курсора, он ограничивает клавиатуру римскими методами ввода, чтобы избежать непреднамеренного отображения методом ввода конфиденциальной информации в виде встроенного текста или в другом окне. Это ведет себя как стандартное текстовое поле пароля 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