Cómo obtener una contraseña desde un script de shell sin hacer eco

Resuelto BD at Rivenhill asked hace 13 años • 9 respuestas

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?

BD at Rivenhill avatar Oct 21 '10 00:10 BD at Rivenhill
Aceptado

Aquí hay otra forma de hacerlo:

#!/bin/bash
# Read Password
echo -n Password: 
read -s password
echo
# Run Command
echo $password

El read -seco se apagará por usted. Simplemente reemplace el echoen la última línea con el comando que desea ejecutar.

En algunos shells (por ejemplo, Bash) readse admiten -p prompt-stringlo que permitirá combinar los comandos echoy :read

read -s -p "Password: " password
wsware avatar Oct 20 '2010 18:10 wsware

Una respuesta compatible con POSIX. Observe el uso de /bin/shen lugar de /bin/bash. (Funciona con bash, pero no requiere bash).

#!/bin/sh
stty -echo
printf "Password: "
read PASSWORD
stty echo
printf "\n"
thecloud avatar Oct 20 '2010 17:10 thecloud

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
smendola avatar Jul 08 '2013 21:07 smendola