Jeda eksekusi dan tunggu input pengguna

29

Saya memiliki skrip yang saya buat dan saya memiliki masalah: Saya ingin menjeda eksekusi dan menunggu input pengguna. Saya pikir saya sudah memilikinya dengan read -p -n 1 $fooperintah tetapi sistem mengalami masalah dengan perintah ini. Ini skrip saya saat ini:

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

Anda mungkin memperhatikan pada fungsi mainmenu entri baca -n 1 -p "text goes here". Di situlah saya mengalami masalah menurut ubuntu. Adakah yang bisa memberitahuku apa yang salah? Terima kasih!

Elliot Labs LLC
sumber
1
Shebang salah. Anda menggunakan fitur bash, jadi shebang harus disetel ke #!/usr/bin/env bashatau #!/bin/bash.
geirha

Jawaban:

37

Seharusnya:

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

Perlu menempatkan nbendera setelahnya, karena ini berarti membaca untuk dijalankan setelah N karakter dimasukkan, jangan menunggu seluruh baris. Periksa help readdan ini untuk detailnya .

NGRode
sumber
2
Saya sudah menemukan jawabannya! Berikut adalah kode yang benar: read -n 1 -p "Input Selection:" "mainmenuinput"Sekarang tidak menunggu penekanan tombol enter / return :-)
Elliot Labs LLC
1
"opsi ilegal -n"
ses
1
Jika Anda hanya ingin menjeda eksekusi dan menunggu untuk melanjutkan dalam for loop:for $whatever; do $whatever; read -n 1 -p Continue?; done
rekciltnuc
Dapatkah seseorang menjelaskan kepada saya mengapa ini help readberhasil, karena helpini bukan program ...?
lindhe
Rupanya itu masalah Bash. Untuk informasi lebih lanjut:help help
lindhe