หยุดการทำงานชั่วคราวและรออินพุตของผู้ใช้


29

ฉันมีสคริปต์ที่ฉันทำและฉันมีปัญหากับมัน: ฉันต้องการหยุดการทำงานชั่วคราวและรอการป้อนข้อมูลจากผู้ใช้ ฉันคิดว่าฉันมีมันด้วยread -p -n 1 $fooคำสั่ง แต่ระบบกำลังมีปัญหากับคำสั่งนี้ นี่คือสคริปต์ปัจจุบันของฉัน:

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

คุณอาจสังเกตเห็นว่าฟังก์ชั่น mainmenu รายการ read -n 1 -p "text go here" นั่นคือที่ฉันมีปัญหาตามอูบุนตู ใครสามารถบอกฉันว่าเกิดอะไรขึ้น ขอบคุณ!


1
Shebang นั้นผิด คุณกำลังใช้คุณลักษณะทุบตีเพื่อ shebang จะต้องมีการตั้งค่าให้หรือ#!/usr/bin/env bash #!/bin/bash
geirha

คำตอบ:


37

ควรจะเป็น:

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

จำเป็นต้องใส่nค่าสถานะหลังจากนั้นตามที่บอกให้อ่านเพื่อดำเนินการหลังจากป้อนอักขระNไม่ต้องรอทั้งบรรทัด ตรวจสอบhelp readและนี้สำหรับรายละเอียด


2
ฉันคิดออกแล้ว! นี่คือรหัสที่ถูกต้อง: read -n 1 -p "Input Selection:" "mainmenuinput"ตอนนี้ไม่ต้องรอการกดปุ่ม enter / return :-)
Elliot Labs LLC

1
"ตัวเลือกที่ผิดกฎหมาย -n"
ses

1
หากคุณเพียงต้องการหยุดการประมวลผลชั่วคราวและรอเพื่อดำเนินการต่อไปอีกรอบ:for $whatever; do $whatever; read -n 1 -p Continue?; done
rekciltnuc

ใครสามารถอธิบายให้ฉันฟังได้ว่าทำไมมันถึงhelp readใช้ได้เพราะhelpไม่ใช่โปรแกรม ... ?
lindhe

เห็นได้ชัดว่ามันเป็นสิ่งที่ทุบตี สำหรับข้อมูลเพิ่มเติม:help help
lindhe
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.