Cómo obtener una contraseña desde un script de shell sin hacer eco
Tengo un script que automatiza un proceso que necesita acceso a un sistema protegido con contraseña. Se accede al sistema a través de un programa de línea de comandos que acepta la contraseña del usuario como argumento.
Me gustaría pedirle al usuario que escriba su contraseña, la asigne a una variable de shell y luego use esa variable para construir la línea de comando del programa de acceso (que, por supuesto, producirá una salida de flujo que procesaré).
Soy un programador de shell razonablemente competente en Bourne/Bash, pero no sé cómo aceptar la entrada del usuario sin que se repita en el terminal (o tal vez que se repita usando caracteres '*').
¿Alguien puede ayudarme con esto?
Aquí hay otra forma de hacerlo:
#!/bin/bash
# Read Password
echo -n Password:
read -s password
echo
# Run Command
echo $password
El read -s
eco se apagará por usted. Simplemente reemplace el echo
en la última línea con el comando que desea ejecutar.
En algunos shells (por ejemplo, Bash) read
se admiten -p prompt-string
lo que permitirá combinar los comandos echo
y :read
read -s -p "Password: " password
Una respuesta compatible con POSIX. Observe el uso de /bin/sh
en lugar de /bin/bash
. (Funciona con bash, pero no requiere bash).
#!/bin/sh
stty -echo
printf "Password: "
read PASSWORD
stty echo
printf "\n"
Un trazador de líneas:
read -s -p "Password: " password
En Linux (y cygwin), este formulario funciona en bash y sh. Sin embargo, puede que no sea el Unix sh estándar.
Para obtener más información y opciones, en bash, escriba "ayuda a leer".
$ help read
read: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
Read a line from the standard input and split it into fields.
...
-p prompt output the string PROMPT without a trailing newline before
attempting to read
...
-s do not echo input coming from a terminal