निष्पादन को रोकें और उपयोगकर्ता इनपुट की प्रतीक्षा करें


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

आप मुख्यमेनू पर देख सकते हैं कि फ़ंक्शन 1 -p "-पाठ यहां पाठ" प्रविष्टि पर जाता है। यह वह जगह है जहाँ मैं ubuntu के अनुसार मुद्दा रहा हूँ। क्या कोई मुझे बता सकता है कि क्या गलत हो रहा है? धन्यवाद!


1
शेबग गलत है। आप बैश सुविधाओं का उपयोग कर रहे हैं, इसलिए शेबंग को #!/usr/bin/env bashया पर सेट किया जाना चाहिए #!/bin/bash
जिरह

जवाबों:


37

होना चाहिए:

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

nझंडे को लगाने की जरूरत है , क्योंकि यह बता रहा है कि एन अक्षर दर्ज करने के बाद निष्पादित करने के लिए पढ़ा जाता है , एक पूरी लाइन की प्रतीक्षा न करें। चेक help readऔर जानकारी के लिए इस


2
मैंने इसका पता लगा लिया है! यहाँ सही कोड है: read -n 1 -p "Input Selection:" "mainmenuinput"यह अब एंटर / रिटर्न कुंजी के प्रेस का इंतजार नहीं करता है :-)
इलियट लैब्स एलएलसी

1
"अवैध विकल्प -n"
Ses

1
यदि आप बस निष्पादन को रोकना चाहते हैं और लूप के लिए जारी रहने की प्रतीक्षा करते हैं:for $whatever; do $whatever; read -n 1 -p Continue?; done
rekciltnuc

क्या कोई मुझे समझा सकता है कि क्यों help readकाम करता है, क्योंकि helpयह एक कार्यक्रम नहीं है ...?
सिंह

जाहिरा तौर पर यह एक बैश बात है। अधिक जानकारी के लिए:help help
information ’
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.