Kiedy chcę poprosić o hasło w bash
skrypcie, robię to:
read -s
... ale kiedy uruchamiam bash
w trybie POSIX sh
, -s
opcja jest odrzucana:
$ read -s
sh: 1: read: Illegal option -s
Jak bezpiecznie poprosić o dane wejściowe za pomocą polecenia zgodnego z POSIX?
Odpowiedzi:
Zwróć uwagę, że w przypadku tych powłok (mksh), w których
printf
nie jest wbudowane, hasło pojawi się naps
wyjściu w postaci wyraźnej (przez kilka mikrosekund) lub może pojawić się w niektórych dziennikach kontroli, jeśli wszystkie wywołania poleceń z ich parametrami są kontrolowane.źródło
cat
+ heredoc może być bezpieczniejszą alternatywą dlaprintf
?REPLY="$(...)"
nie szkodzą (z wyjątkiem podświetlania składni SE), ale nie są koniecznestty
ustawienia.read -s
nie ma w POSIX. Jeśli chcesz być zgodny z POSIX, użyjstty -echo
.stty
a jegoecho
parametr jest zdefiniowany w POSIX.Działa to na wszystkich powłokach zgodnych z POSIX.
Źródło
źródło
stty echo
- na wypadek, gdyby użytkownik się zdezorientował i wcisnął Control-C podczasread PASSWORD
sekcji .