2010-10-20 16 views
27

Estoy creando un script Bash installer que compila e instala algunas bibliotecas para OSX y Linux. Debido a que algunos comandos en mi script ("make install", "apt-get install", "port install", etc.) requieren sudo, necesito que el usuario me proporcione la contraseña.Scripts Bash que requieren la contraseña de sudo

Actualmente, al usuario se le pide la contraseña cada vez que el primer comando sudo está a punto de ejecutarse, pero como suele ser después de una etapa de compilación, siempre hay un tiempo entre el inicio del script y la contraseña.

Me gustaría poner la entrada + verificación de contraseña al comienzo del script. También tengo curiosidad de saber si esta es realmente una buena forma de instalar las bibliotecas del sistema.

Alternativamente podría instalar las bibliotecas en una ubicación de espacio aislado local que no requiere sudo, pero luego tendré que decirle a apt-get y macports dónde instalar sus bibliotecas distintas del/usr/local/predeterminado/opt/local, y no estoy seguro de cómo hacerlo ni si es una idea inteligente.

Respuesta

51

Para obtener la contraseña, simplemente ponga sudo echo "Thanks." al comienzo de la secuencia de comandos.

Pero preferiría esta solución:

if [[ $UID != 0 ]]; then 
    echo "Please run this script with sudo:" 
    echo "sudo $0 $*" 
    exit 1 
fi 
+0

Claro y simple. ¡Gracias! –

+0

¿Por qué 'echo' para sudo si puedes' sudo' directamente? –

+0

@TobiasKienzler: Porque la pregunta lo pidió. –

4

Para aquellos que no quieren elevar el guión completo (para limitar los riesgos utilizando sólo sudo dentro de la escritura cuando sea necesario) la primera parte de la aceptación answer sudo echo "Thanks" funciona pero no responderá a la falla de contraseña de sudo al salir del script. Para lograr esto, las secuencias de comandos que incluyen comandos sudo y quieren asegurar el acceso sudo antes de que sea utilizado podría comenzar con

if [[ ! $(sudo echo 0) ]]; then exit; fi 

La advertencia es que usted está confiando en la existencia de un tiempo de espera sudoers que va a durar la duración de la secuencia de comandos para suprimir el resto de las indicaciones.

Cuestiones relacionadas