Bashスクリプトは端末を介して実行されますが、メインメニューからは実行されません。

Bashスクリプトは端末を介して実行されますが、メインメニューからは実行されません。

ターミナルやノーチラスでbashスクリプトを実行すると正常に動作しますが、gnomeの「メインメニュー」で実行するとエラーが返されます。

read -p "" -n1 selection

これは次のエラーを返す行です。

/usr/local/bin/php-version.sh: 9: read: Illegal option -n

しかし、端末()を介してスクリプトを実行しても./file.sh問題はありません。

メインメニュー項目は次のとおりです。bash usr/local/bin/php-version.sh

ファイル権限は755で、所有者はrootです。

編集する:

/usr/local/bin/php-version.sh

#!/bin/bash

sudo echo -e "sudo/root permission: \e[32mOkay\e[0m"

echo -e "Type \e[2m5\e[0m to change from php version \e[1m7 \e[0mto \e[1m5\e[0m"
echo -e "Type \e[2m7\e[0m to change from php version \e[1m5 \e[0mto \e[1m7\e[0m"

echo -en "\e[1mSelect: \e[0m"
read -p "" -n1 selection
echo

case "$selection" in
    "5") 
        sudo a2dismod php7.0 >> /dev/null
        sudo a2enmod php5 >> /dev/null
        sudo a2query -m php5
        ;;
    "7")
        sudo a2dismod php5 >> /dev/null
        sudo a2enmod php7.0 >> /dev/null
        sudo a2query -m php7.0
        ;;
    *)
        sudo echo -e "\e[91mInvalid input: \e[39m$selection\e[0m"
        echo -en "\e[2mPress Enter..."; sed -n q </dev/tty
        exit 1
        ;;
esac

echo "Restarting apache2..."; sudo service apache2 restart    
echo -en "\e[2mPress Enter..."; sed -n q </dev/tty

/usr/local/bin/test.sh(このreadコマンドは常に有効です.)

#!/bin/bash

ps aux | grep $$ | grep -v grep

read -p "" -n1 test

echo -e "\n"

env

$SHELL

ベストアンサー1

read "" -n1 selectionメニューではなく端末で動作する理由を本当に理解していません。エラーメッセージも誤解を招くようです。しかし、正しいbash構文は次のとおりです。

read -n 1 selection

この行を変更できますphp-version.sh

それ以外はスクリプト全体が少し奇妙に見えます。ほとんどのsudoコマンドはでなければなりませんsudo。とにかくそれは問題ではありません。

おすすめ記事