답변:
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"
)"
}
printf
내장 되어 있지 않은 쉘 (mksh)의 경우 , 암호는 ps
출력에서 몇 마이크로 초 동안 명확하게 표시 되거나 매개 변수를 가진 모든 명령 호출이 감사되면 일부 감사 로그에 표시 될 수 있습니다.
cat
+ heredoc이 printf
?
stty
설정 을 저장하고 복원하는 방법을 보여 주셔서 감사합니다 .
read -s
POSIX에 없습니다. POSIX 호환이 되려면를 사용하십시오 stty -echo
. stty
그리고 그 echo
매개 변수 는 POSIX에 정의되어 있습니다.
#!/bin/bash
stty -echo
printf "Password: "
read PASSWORD
stty echo
printf "\n"
이것은 POSIX를 준수하는 모든 쉘에서 작동합니다.
stty echo
하려면 사용자가 혼란스러워하고 read PASSWORD
섹션 에서 control-C를 누르는 경우 다시 켜기 위해 할 수있는 모든 신호를 포착하는 것이 좋습니다. .