ターミナルやノーチラスで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
。とにかくそれは問題ではありません。