Se bem entendi, você está executando o script diretamente de um ambiente GUI, não de dentro de um terminal.
O terminal é o que fornece ao script uma maneira de receber informações. Se você executar o script a partir da GUI por meio de uma entrada de menu ou de um atalho de teclado, a entrada do script não será conectada a nada (esse nada é chamado de /dev/null
), então quando você pede para ler uma linha, o comando read
diz que não há nada para ler (fim do arquivo).
Você tem duas soluções: alterar a maneira como chama seu script ou alterar seu script. O primeiro é mais simples e permite que seu script seja executado dentro de um terminal, às vezes. Este último é mais complexo, mas mais flexível.
Você pode alterar facilmente seu script para ser executado em um terminal. Em vez de configurar um atalho de teclado para /path/to/script
, defina um atalho de teclado para xterm -e /path/to/script
ou gnome-terminal -e /path/to/script
ou qualquer emulador de terminal de sua preferência. A janela do terminal aparecerá assim que você pressionar a tecla e desaparecerá quando o script terminar.
Como alternativa, você pode alterar seu script para ler a entrada por meio de uma janela da GUI, em vez de sua entrada padrão. Zenity é uma escolha comum para isso (há um Pacote Ubuntu Instale o zenity http://bit.ly/software-small . Dentro do seu script, você pode usar [ -t 0 ]
para testar se está sendo executado em um terminal.
if [ -t 0 ]; then
echo "What is your favorite color?"
read -r color
else
color=$(zenity --entry --text "What is your favorite color?")
fi