2012-07-07 13 views
9

Básicamente tengo un script bash que ejecuta 5 comandos en una fila. Quiero agregar una lógica que me pregunte "¿Desea ejecutar el comando A?" Y si digo SÍ, se ejecutará el comando; de lo contrario, el script saltará a otra línea y verá el mensaje "¿Desea ejecutar el comando B?" .¿Un simple script bash if/else que reacciona a la entrada yes/no del usuario?

El guión es muy simple y se ve así

echo "Running A" 
commandA & 
sleep 2s; 
echo "done!" 

echo "Running B" 
commandB & 
sleep 2s; 
echo "done!" 
... 
+2

¿por qué estás usando '&' y durmiendo allí? debe ejecutarlo sincrónicamente ... – cha0site

+0

@ cha0site Estoy comenzando una herramienta de desarrollo externo y sin & la herramienta comenzará a funcionar solo con el primer comando – sandalone

Respuesta

16

Uso read la orden interna para obtener la entrada del usuario.

read -p "Run command $foo? [yn]" answer 
if [[ $answer = y ]] ; then 
    # run the command 
fi 

Poner lo anterior en un function que toma el mando (y posiblemente el símbolo) como un argumento si se va a hacer eso varias veces.

+0

I no funciona con corchetes dobles [[[, pero funciona con corchete simple [corchete]. – sandalone

+1

Realmente debería funcionar con '[['. ¿Estás seguro de que estás usando 'bash', con' #!/bin/bash' como la primera línea de tu script? – Mat

+0

no hay '#!/bin/bash' en la primera línea. Supongo que ese puede ser el problema, ya que no dije explícitamente que es bash. – sandalone

1

Quiere el Bash read builtin. Puede realizar esto en un bucle utilizando la implícita RESPUESTA variable de este modo:

for cmd in "echo A" "echo B"; do 
    read -p "Run command $cmd? " 
    if [[ ${REPLY,,} =~ ^y ]]; then 
     eval "$cmd" 
     echo "Done!" 
    fi 
done 

Este bucle a través de todos sus comandos, preguntará al usuario para cada uno, y luego ejecutar el comando sólo si la primera letra la respuesta del usuario es un carácter Y o y. ¡Espero que ayude!

+0

Puede intentar evitar 'eval' si puede. Una idea sería encapsular cada comando en una función que se describe a sí misma o se ejecuta a sí misma dependiendo de cómo la invoque. – tripleee

+0

La expansión de parámetros en minúsculas '$ {,,}' requiere Bash 4. Y vea [BashFAQ/050] (http://mywiki.wooledge.org/BashFAQ/050). –

Cuestiones relacionadas