実行を一時停止し、ユーザー入力を待つ


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

メインメニュー機能でread -n 1 -p "text goes here"エントリに気付くかもしれません。それはubuntuによると私が問題を抱えているところです。誰かが何が間違っているのか教えてもらえますか?ありがとう!


1
シバングは間違っています。bash機能を使用しているため、shebangを#!/usr/bin/env bashまたはに設定する必要があります#!/bin/bash
ガイラ14

回答:


37

する必要があります:

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

N個の文字が入力されたn後に実行するようreadに指示しているため、フラグを後に置く必要があります。行全体を待たないでください。詳細を確認してください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
リンデ

どうやらそれはBashのことです。詳細については、次を参照してくださいhelp help
。–リンデ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.