ao executar um comando de leitura dentro de um xterm -e, ele não armazena o resultado da leitura

1

Ao executar o seguinte em #!/bin/bash

xterm -e "echo 123;read ANSWER;echo answer=$ANSWER;sleep 5"

Eu obtenho estes resultados em uma janela xterm (não importa o que eu digite para a leitura).

123
answer=

Por isso, nunca armazena minha entrada na variável ANSWER.

Tenho certeza de que tem algo a ver com a execução de vários comandos de xterm -e .

Ajuda?

    
por cedenker 07.05.2016 / 13:54

2 respostas

2

Meu palpite é que a instância de bash, na qual você está executando o comando xterm, já resolve a variável $ANSWER antes de passá-la ao xterm.

Ou escape do símbolo do dólar ou use aspas simples em torno das expressões. Isso parece funcionar no meu caso.

Atualizar - sintaxe:

xterm -e "echo 123;read ANSWER;echo answer=\$ANSWER;sleep 5"

ou

xterm -e 'echo 123;read ANSWER;echo answer=$ANSWER;sleep 5'

Isso é equivalente a sua sintaxe se ANSWER estiver vazio antes da chamada xterm:

xterm -e "echo 123;read ANSWER;echo answer=;sleep 5"

Como você pode ver, a variável é resolvida para o valor e nunca entra no xterm. Além disso, o bash em execução dentro de seu comando xterm é completamente separado, variáveis ou seus valores de dentro não podem ser facilmente passados para fora de seu escopo.

    
por 07.05.2016 / 14:14
0

É um problema de citação:

xterm -e 'echo 123;read ANSWER;echo answer=$ANSWER;sleep 5'

Você precisa do shell dentro de xterm para ver um literal $ - não tê-lo expandido pelo seu shell atual.

    
por 10.05.2016 / 18:56

Tags