2017-06-12 5 views
0

基本的にユーザに質問をし、ユーザからの入力に応じてカスタムアプリケーションの値を設定するスクリプトを実行したかったのです。問題は、実行されているが、ユーザーに入力を促さず、デフォルト値をとることです。私は以下のようにrootユーザのbashrcに、スクリプトと呼ばれている最初のrootログインisuue

if [ -e /opt/services_vm/autoUpgrade.sh ]; 
then 
    /opt/services_vm/autoUpgrade.sh 
fi 
問題は、入力と最初のcase文のためのプロンプトではないユーザーが取得しているということです

#!/bin/bash 

    while true; do 
      read -p "Do you want to enable automatic upgrade [Y|y - Yes] [N|n - No] [Yes] ?" yn 
      case $yn in 
        [Yy] | "") sed -i "s#<autoupgrade-enabled>OFF<\/autoupgrade-enabled>#<autoupgrade-enabled>ON<\/autoupgrade-enabled>#g" /opt/avaya/SAL/gateway/SpiritAgent/config/agent/SPIRITAgent_1_0_PDComponentConfig.xml; 
           rm -rf /opt/services_vm/autoUpgrade.sh 
           exit;; 
        [Nn]) rm -rf /opt/services_vm/autoUpgrade.sh 
          exit;; 
        *) echo "Please answer yes or no.";; 
      esac 
    done 

以下のように

自動アップグレードスクリプトが見えますデフォルトで実行されます。これはログに表示されます。また、私が作った構成に従って、rootユーザーは最初の試行でパスを変更しなければなりません。そのユーザーは、パスを変更してスクリプトの下で実行するが、ユーザーにプロンプ​​トを出すのではなくデフォルトの入力を行うように強制する。

答えて

0

私はあなたのスクリプトを以下のように試してみました。それを.bashrcに入れて、期待通りに動作します。プロンプトが表示され、答えが実行されます(正しい単語が返されます)。最初に試してみてください。私は問題があなたのスクリプトからではないと感じています。

#!/bin/bash 

while true; do 
     read -p "Do you want to enable automatic upgrade [Y|y - Yes] [N|n - No] [Yes] ?" yn 
     case $yn in 
       [Yy] | "") echo YES; 
          exit;; 
       [Nn]) echo NO; 
         exit;; 
       *) echo "Please answer yes or no.";; 
     esac 
done 
+0

私はそれを手動で入れると機能します。しかし、私はそれが最初のルートログインでのみ実行される、この理由のためにスクリプト内の自己削除ステートメントをコーディングしたい。そのVMはどこセントOSのためのイメージを作成し、マシン上に展開しています。私は最初のログイン時にパスワードを変更するためにrootユーザーを設定しており、その後スクリプトが実行されるはずです。 – user530158

+0

スクリプトの呼び出しは.bashrcファイルからです。rootにログインするとスクリプトが実行されることを期待していました。スクリプトがいつ実行されるかは不明です。 – user530158

0

自己削除スクリプトなので、最初のrootログインの前に削除されていました。 .bashrcがどのように実行されているかは不明ですが、他のスクリプトがソースになっている可能性があります。そして、私は間違った印象を受けていたので、最初のrootログインでは呼び出されませんでした。 あなたのおかげでKambizに感謝します。

関連する問題