Pausar a execução e aguardar a entrada do usuário


29

Tenho um script que estou criando e tenho um problema com ele: gostaria de pausar a execução e aguardar a entrada do usuário. Eu pensei que eu tinha isso com o read -p -n 1 $foocomando, mas o sistema está tendo problemas com este comando. Aqui está o meu script atual:

#!/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!!!!

Você pode notar na função do menu principal a entrada de leitura -n 1 -p "texto aqui". É aí que estou tendo o problema de acordo com o ubuntu. Alguém pode me dizer o que está errado? obrigado!


1
O shebang está errado. Você está usando os recursos do bash, portanto, o shebang deve estar definido como #!/usr/bin/env bashou #!/bin/bash.
precisa saber é o seguinte

Respostas:


37

Deveria estar:

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

É necessário colocar o nsinalizador depois, pois isso indica que a leitura deve ser executada após a inserção de N caracteres, não espere por uma linha inteira. Verifique help reade isso por detalhes .


2
Eu descobri isso! Aqui está o código correto: read -n 1 -p "Input Selection:" "mainmenuinput"Ele agora não espera que a imprensa da chave / retorno entrar :-)
Elliot Labs LLC

1
"opção ilegal -n"
ses

1
Se você quiser apenas pausar a execução e esperar para continuar em um loop for:for $whatever; do $whatever; read -n 1 -p Continue?; done
rekciltnuc

Alguém pode me explicar por que help readfunciona, pois helpnão é um programa ...?
Lindhe

Aparentemente, é uma coisa do Bash. Para mais informações:help help
lindhe
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.