Запросить пароль в POSIX-совместимой оболочке?

Когда я хочу запросить пароль в сценарии bash , я делаю это:

 read -s 

… но когда я запускаю bash в режиме POSIX, с sh , опция не существует:

 $ read -s sh: 1: read: Illegal option -s 

Как я могу запросить ввод с помощью команды POSIX?

  • Как сгенерировать Zipf-подобные образцы, используя язык сценариев
  • Извлечение символов после определенного текста
  • создание пользователя add
  • Инвертировать логическую переменную
  • ifconfig -a получить необходимые данные grepping
  • Использовать xvfb для автоматизации программы X
  • Объединить файлы с двумя столбцами в один файл
  • Заменить открытый кронштейн (с! (Только в определенном месте по символу a ->
  • 2 Solutions collect form web for “Запросить пароль в POSIX-совместимой оболочке?”

    read -s не находится в POSIX. Если вы хотите быть совместимым с POSIX, используйте stty -echo . stty и его echo параметр определены в POSIX.

     #!/bin/bash stty -echo printf "Password: " read PASSWORD stty echo printf "\n" 

    Это будет работать на всех оболочках, соответствующих POSIX.

    Источник

     read_password() { REPLY="$( # always read from the tty even when redirected: exec < /dev/tty || exit # || exit only needed for bash # save current tty settings: tty_settings=$(stty -g) || exit # schedule restore of the settings on exit of that subshell # or on receiving SIGINT or SIGTERM: trap 'stty "$tty_settings"' EXIT INT TERM # disable terminal local echo stty -echo || exit # prompt on tty printf "Password: " > /dev/tty # read password as one line, record exit status IFS= read -r password; ret=$? # display a newline to visually acknowledge the entered password echo > /dev/tty # return the password for $REPLY printf '%s\n' "$password" exit "$ret" )" } 

    Обратите внимание, что для этих оболочек (mksh), где printf не встроен, пароль будет отображаться в выводе ps (на несколько микросекунд) или может отображаться в некоторых журналах аудита, если проверяются все вызовы команд с их параметрами.

    Linux и Unix - лучшая ОС в мире.