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이고 소유자는 루트입니다.

편집하다:

/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. 어쨌든 그것은 문제가 되지 않습니다.

관련 정보