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

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

 read -s 

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

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

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

  • Параллельное выполнение сценария bash
  • Сценарий Bash: файл справки внутри скрипта или в другом файле?
  • Расчет разницы по дате
  • Как я могу запускать команду периодически и неограниченно, пока она не отключится?
  • При чтении из файла выберите конкретные поля и сравните их с другим файлом в Unix bash?
  • Можно ли запустить команду из bash и отправить ей нажатие клавиши
  • определить, нажата ли клавиша из сценария
  • Использование sed для вставки латексных команд вокруг заголовков документа
  • 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 (на несколько микросекунд) или может отображаться в некоторых журналах аудита, если проверяются все вызовы команд с их параметрами.

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