1

При запуске следующего в #!/bin/bash

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

Я получаю эти результаты в окне xterm (независимо от того, что я печатаю для чтения).

123
answer=

Так что он никогда не сохраняет мои данные в переменной ANSWER.

Я уверен, что это как-то связано с запуском нескольких команд из xterm -e .

Помогите?

2 ответа2

2

Я предполагаю, что экземпляр bash, в котором вы выполняете команду xterm, уже разрешает переменную $ANSWER прежде чем передать ее в xterm.

Либо избегайте символа доллара, либо используйте одинарные кавычки вокруг выражений. Это похоже на работу в моем случае.

Обновление - синтаксис:

xterm -e "echo 123; читать ОТВЕТ; echo answer =\$ ANSWER; sleep 5"

или же

xterm -e 'echo 123; прочитайте ОТВЕТ; ответ отголоска = $ ANSWER; сон 5'

Это эквивалентно вашему синтаксису, если ANSWER пуст до вызова xterm:

xterm -e "echo 123; прочитайте ОТВЕТ; echo answer =; sleep 5"

Как видите, переменная преобразуется в значение и никогда не входит в xterm. Кроме того, bash, выполняемый внутри вашей команды xterm, полностью разделен, переменные или их значения изнутри не могут быть легко переданы за пределы его области видимости.

0

Это проблема цитирования:

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

Вам нужна оболочка внутри xterm чтобы увидеть литерал $ - он не должен быть расширен вашей текущей оболочкой.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .