L'option -s
de read
n'est pas défini dans la norme POSIX. Voir http://pubs.opengroup.org/onlinepubs/9699919799/utilities/read.html. Je voulais quelque chose qui fonctionnerait pour n'importe quel shell POSIX, j'ai donc écrit une petite fonction qui utilise stty
pour désactiver l'écho.
#!/bin/sh
# Read secret string
read_secret()
{
# Disable echo.
stty -echo
# Set up trap to ensure echo is enabled before exiting if the script
# is terminated while echo is disabled.
trap 'stty echo' EXIT
# Read secret.
read "[email protected]"
# Enable echo.
stty echo
trap - EXIT
# Print a newline because the newline entered by the user after
# entering the passcode is not echoed. This ensures that the
# next line of output begins at a new line.
echo
}
Cette fonction se comporte assez similaire à la commande read
. Voici une utilisation simple de read
suivie d'une utilisation similaire de read_secret
. L'entrée à read_secret
apparaît vide car elle n'a pas été répercutée sur le terminal.
[[email protected] ~]$ read a b c
foo \bar baz \qux
[[email protected] ~]$ echo a=$a b=$b c=$c
a=foo b=bar c=baz qux
[[email protected] ~]$ unset a b c
[[email protected] ~]$ read_secret a b c
[[email protected] ~]$ echo a=$a b=$b c=$c
a=foo b=bar c=baz qux
[[email protected] ~]$ unset a b c
Voici une autre qui utilise l'option -r
pour préserver les antislashs dans l'entrée. Cela fonctionne car la fonction read_secret
définie ci-dessus transmet tous les arguments qu'il reçoit à la commande read
.
[[email protected] ~]$ read -r a b c
foo \bar baz \qux
[[email protected] ~]$ echo a=$a b=$b c=$c
a=foo b=\bar c=baz \qux
[[email protected] ~]$ unset a b c
[[email protected] ~]$ read_secret -r a b c
[[email protected] ~]$ echo a=$a b=$b c=$c
a=foo b=\bar c=baz \qux
[[email protected] ~]$ unset a b c
Enfin, voici un exemple qui montre comment utiliser la fonction read_secret
pour lire un mot de passe d'une manière conforme aux spécifications POSIX.
printf "Password: "
read_secret password
# Do something with $password here ...
duplication possible de [Comment faire bash script demander un mot de passe?] (Http://stackoverflow.com/questions/2654009/how-to-make-bash-script -ask-for-a-password) –