Metti in pausa l'esecuzione e attendi l'input dell'utente


29

Ho uno script che sto realizzando e ho un problema con esso: vorrei mettere in pausa l'esecuzione e attendere l'input dell'utente. Pensavo di averlo con il read -p -n 1 $foocomando ma il sistema ha problemi con questo comando. Ecco la mia sceneggiatura attuale:

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

È possibile notare nella funzione del menu principale la voce di lettura -n 1 -p "il testo va qui". È qui che sto riscontrando il problema secondo Ubuntu. Qualcuno può dirmi cosa non va? Grazie!


1
Lo shebang è sbagliato. Stai usando le funzionalità bash, quindi lo shebang deve essere impostato su #!/usr/bin/env basho #!/bin/bash.
geirha,

Risposte:


37

Dovrebbe essere:

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

È necessario inserire la nbandiera dopo, poiché ciò indica che la lettura deve essere eseguita dopo l'inserimento di N caratteri, non attendere un'intera riga. Controlla help reade questo per i dettagli .


2
L'ho immaginato! Ecco il codice corretto: read -n 1 -p "Input Selection:" "mainmenuinput"Ora non attende la pressione del tasto Invio / Invio :-)
Elliot Labs LLC

1
"opzione illegale -n"
ses

1
Se vuoi solo mettere in pausa l'esecuzione e aspettare di continuare in un ciclo for:for $whatever; do $whatever; read -n 1 -p Continue?; done
rekciltnuc

Qualcuno può spiegarmi perché help readfunziona, dal momento che helpnon è un programma ...?
lindhe,

Apparentemente è una cosa Bash. Per maggiori informazioni:help help
lindhe,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.