Призупиніть виконання та чекайте введення користувачем


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

Ви можете помітити в функції головного меню запис -n 1 -p "текст йде сюди". Саме там у мене виникають проблеми відповідно до ubuntu. Може хтось скаже мені, що йде не так? Спасибі!


1
Шебанг помиляється. Ви використовуєте функції bash, тому для 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"Тепер він не чекає натискання клавіші введення / повернення :-)
ТОВ «Елліот Лабораторії»

1
"Незаконний варіант -n"
SES

1
Якщо ви просто хочете призупинити виконання та зачекати, щоб продовжити цикл для:for $whatever; do $whatever; read -n 1 -p Continue?; done
rekciltnuc

Хтось може мені пояснити, чому це help readпрацює, оскільки helpце не програма ...?
lindhe

Мабуть, це справа Баша. Для отримання додаткової інформації:help help
Lindhe
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.