🔒 Скрытие пользовательского ввода в скриптах bash |

🔒 Скрытие пользовательского ввода в скриптах bash

Скрипты

Это может быть полезно, когда вы просите пользователей ввести пароли, API-токены или что-то еще, что вы не хотите выводить на экран.

Мы рассмотрим два решения.

Одно работает с любой оболочкой Bash или Bash-подобной оболочкой, а другое соответствует POSIX, если вам нужна максимальная совместимость.

Скрипт ниже включает в себя оба решения.

Это пример, который вы можете запустить, но в нем есть только 1-3 строки кода в середине, которые сосредоточены на скрытии пользовательского ввода.

Вы можете раскомментировать вариант 1 или 2 в зависимости от вашего случая использования.

#!/usr/bin/env bash

set -o errexit
set -o nounset

while true; do
  printf "Please input your API key and hit enter: "

  # ВАРИАНТ 1: ТРЕБУЕТСЯ ОБОЛОЧКА BASH ИЛИ BASH-ПОДОБНАЯ ОБОЛОЧКА (BASH, ZSH, ASH И Т. Д.)
  read -sr key

  # ВАРИАНТ 2: ДЛЯ МАКСИМАЛЬНОЙ СОВМЕСТИМОСТИ С ОБОЛОЧКАМИ (SH, DASH И Т. Д.)
  # stty -echo
  # read -r key
  # stty echo

  if [ -z "${key}" ]; then
    printf "\n\nPlease input your API key or hit CTRL+c to halt this script\n\n"
  else
    # TODO: Вставьте свою пользовательскую логику, которая использует этот ключ.
    printf "\n\nFor demo purposes, your API key is: %s\n" "${key}"
    break
  fi
done

Основное отличие заключается в том, что флаг -s из read недоступен в sh и других минимальных оболочках.

Флаг -s не позволяет передавать ввод пользователя через echo.

Чтобы обойти это ограничение, мы можем использовать stty, чтобы отключить эхо, возвращающее наш чувствительный текст, записать этот ввод в переменную, а затем снова включить echo.

🐧 Как установить и перечислить переменные среды в Linux

Технически вы можете пропустить последний stty echo, и наш вывод будет показан, но мы заметили, что при использовании sh или bash ваш интерпретатор перестает выдавать эхо после выхода из этого скрипта.

Более современные оболочки, такие как zsh, похоже, автоматически исправляют это, но мы не знаем точных деталей.

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий