When I run a bash script from terminal or nautilus, it works properly, but when I run it via gnome's 'Main Menu', it returns an error.

read -p "" -n1 selection

This is the line, that return the following error:

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

But when I run the script via terminal (./file.sh), there's no problem with this

The Main Menu entry is bash usr/local/bin/php-version.sh

File permissions are 755, owner is root.




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

case "$selection" in
        sudo a2dismod php7.0 >> /dev/null
        sudo a2enmod php5 >> /dev/null
        sudo a2query -m php5
        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

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

/usr/local/bin/test.sh (where the read command always works)


ps aux | grep $$ | grep -v grep

read -p "" -n1 test

echo -e "\n"


  • 2
    Could you write a simple debugging script test.sh to check whether gnome does really start a non-posix bash where read -n should work? test.sh could do env to see all variables and ps aux | grep $$ | grep -v grep to see which shell is used.
    – rudimeier
    Commented Oct 7, 2016 at 21:51
  • ps aux | grep $$ | grep -v grep returns scriptim 3669 0.0 0.0 13236 2844 pts/1 Ss+ 00:08 0:00 /bin/bash /usr/local/bin/test.sh (terminal) scriptim 5188 0.0 0.0 13236 2852 pts/1 Ss+ 00:15 0:00 bash /usr/local/bin/test.sh (Main Menu) POSIXLY_CORRECT is not defined
    – Scriptim
    Commented Oct 7, 2016 at 22:19
  • @rudimeier yes, both terminal and main menu
    – Scriptim
    Commented Oct 7, 2016 at 22:28
  • So the problem must be located inside php-version.sh. Could you post both the working test.sh and the bad php-version.sh? (Edit your question.)
    – rudimeier
    Commented Oct 7, 2016 at 22:32

1 Answer 1


I don't really see why read "" -n1 selection works in terminal and not from the menu. The error message seems misleading too. However the correct bash syntax should be

read -n 1 selection

You may change that line in php-version.sh.

Beside that the whole scripts looks a bit strange. Most of the sudo commands should not be sudo. Anyways that wasn't the question.

  • Fixed the sudo thing, my fault - this had different reasons
    – Scriptim
    Commented Oct 7, 2016 at 22:57

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .