Unterbrechen Sie die Ausführung und warten Sie auf Benutzereingaben


29

Ich habe ein Skript, das ich erstelle, und ich habe ein Problem damit: Ich möchte die Ausführung anhalten und auf Benutzereingaben warten. Ich dachte, dass ich es mit dem read -p -n 1 $fooBefehl hatte, aber das System hat Probleme mit diesem Befehl. Hier ist mein aktuelles Skript:

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

Möglicherweise bemerken Sie in der Hauptmenüfunktion den Eintrag read -n 1 -p "text goes here". Dort habe ich das Problem laut Ubuntu. Kann mir jemand sagen, was falsch läuft? Vielen Dank!


1
Der Shebang ist falsch. Sie verwenden Bash-Funktionen, daher muss der Shebang auf #!/usr/bin/env bashoder gesetzt sein #!/bin/bash.
Geirha

Antworten:


37

Sollte sein:

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

Setzen Sie das nFlag nach, da dies bedeutet, dass read ausgeführt werden muss, nachdem N Zeichen eingegeben wurden. Warten Sie nicht auf eine ganze Zeile. Überprüfen Sie help readund dies für Details .


2
Ich habe es herausgefunden! Hier ist der richtige Code: read -n 1 -p "Input Selection:" "mainmenuinput"Es wartet jetzt nicht auf das Drücken der Eingabe- / Eingabetaste :-)
Elliot Labs LLC

1
"illegale Option -n"
ses

1
Wenn Sie die Ausführung nur anhalten und in einer for-Schleife for $whatever; do $whatever; read -n 1 -p Continue?; done
fortfahren möchten

Kann mir jemand erklären, warum das help readfunktioniert, da helpes kein Programm gibt ...?
Lindhe

Anscheinend ist es eine Bash-Sache. Weitere Informationen:help help
Lindhe
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.