Bash 脚本通过终端运行,但不能通过主菜单运行

Bash 脚本通过终端运行,但不能通过主菜单运行

当我从终端或 nautilus 运行 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.无论如何,这不是问题。

相关内容