Buscando entrada do usuário durante a execução em segundo plano

5

Estou escrevendo um script que solicita ao usuário informações e faz algum processamento posteriormente. Eu estava usando read para obter os dados, mas notei que quando o script é executado com um atalho de teclado (adicionei uma entrada na lista de atalhos de teclado do Ubuntu) ele ignora o read e continua com o restante do código .

Como posso ler a entrada do usuário com um script sendo executado em segundo plano como este?

    
por nmat 22.11.2011 / 00:39

1 resposta

8

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
    
por 22.11.2011 / 01:46