Tạm dừng thực thi và chờ nhập liệu của người dùng


29

Tôi có một kịch bản mà tôi đang thực hiện và tôi có một vấn đề với nó: Tôi muốn tạm dừng thực thi và chờ người dùng nhập liệu. Tôi nghĩ rằng tôi đã có nó với read -p -n 1 $foolệnh nhưng hệ thống đang gặp vấn đề với lệnh này. Đây là kịch bản hiện tại của tôi:

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

Bạn có thể nhận thấy tại chức năng mainmenu, mục nhập "văn bản ở đây" đọc -n 1 -p. Đó là nơi tôi đang gặp vấn đề theo ubfox. Ai đó có thể cho tôi biết những gì đang xảy ra? cảm ơn!


1
Các shebang là sai. Bạn đang sử dụng các tính năng bash, vì vậy shebang phải được đặt thành #!/usr/bin/env bashhoặc #!/bin/bash.
geirha

Câu trả lời:


37

Nên là:

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

Cần đặt ncờ sau, vì đó là thông báo đọc để thực thi sau khi nhập N ký tự, đừng đợi toàn bộ dòng. Kiểm tra help readđiều này để biết chi tiết .


2
Tôi đã tìm ra nó! Đây là mã chính xác: read -n 1 -p "Input Selection:" "mainmenuinput"Bây giờ không chờ nhấn phím nhập / trả lại :-)
Elliot Labs LLC

1
"Tùy chọn bất hợp pháp -n"
Ses

1
Nếu bạn chỉ muốn tạm dừng thực thi và chờ đợi để tiếp tục trong vòng lặp for:for $whatever; do $whatever; read -n 1 -p Continue?; done
rekciltnuc

Ai đó có thể giải thích cho tôi tại sao help readhoạt động, vì helpkhông phải là một chương trình ...?
lindhe

Rõ ràng đó là một điều Bash. Để biết thêm thông tin:help help
lindhe
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.