Pausa la ejecución y espera la entrada del usuario


29

Tengo un script que estoy creando y tengo un problema con él: me gustaría pausar la ejecución y esperar la entrada del usuario. Pensé que lo tenía con el read -p -n 1 $foocomando pero el sistema está teniendo problemas con este comando. Aquí está mi script actual:

#!/bin/sh

# Ititialization

mainmenu () {
  echo "Press 1 to update your system"
  echo "Press 2 to install samba"
  echo "Press 3 to install vsFTPd"
  echo "Press 4 to install the current version of Webmin"
  echo "Press 5 to configure samba for Active Directory"
  echo "Press x to exit the script"
  read -n 1 -p "Input Selection:" mainmenuinput
  if [ "$mainmenuinput" = "1" ]; then
            updatesystem
        elif [ "$mainmenuinput" = "2" ]; then
            installsamba
        elif [ "$mainmenuinput" = "3" ]; then
            installvsftpd
        elif [ "$mainmenuinput" = "4" ]; then
            installwebmin
        elif [ "$mainmenuinput" = "5" ]; then
            configuresambaforactivedirectory
        elif [ "$mainmenuinput" = "x" ];then
            quitprogram
        elif [ "$mainmenuinput" = "X" ];then
            quitprogram
        else
            echo "You have entered an invallid selection!"
            echo "Please try again!"
            echo ""
            echo "Press any key to continue..."
            read -n 1
            clear
            mainmenu
        fi
}

# This builds the main menu and routs the user to the function selected.

mainmenu

# This executes the main menu function.
# Let the fun begin!!!! WOOT WOOT!!!!

Puede notar en la función del menú principal la entrada de lectura -n 1 -p "el texto va aquí". Ahí es donde tengo el problema según ubuntu. ¿Alguien puede decirme qué está yendo mal? ¡Gracias!


1
El shebang está mal. Estás utilizando funciones bash, por lo que el shebang debe establecerse en #!/usr/bin/env basho #!/bin/bash.
geirha

Respuestas:


37

Debiera ser:

read  -n 1 -p "Input Selection:" mainmenuinput

Es necesario colocar la nbandera después, ya que eso indica que se ejecute la lectura después de ingresar N caracteres, no espere una línea completa. Verifique help ready esto para más detalles .


2
¡Lo he descubierto! Aquí está el código correcto: read -n 1 -p "Input Selection:" "mainmenuinput"ahora no espera la presión de la tecla enter / return :-)
Elliot Labs LLC

1
"opción ilegal -n"
ses

1
Si solo desea pausar la ejecución y esperar para continuar en un ciclo for:for $whatever; do $whatever; read -n 1 -p Continue?; done
rekciltnuc

¿Alguien puede explicarme por qué help readfunciona, ya helpque no es un programa ...?
lindhe

Aparentemente es una cosa de Bash. Para más información:help help
Lindhe
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.