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

301
cedenker

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

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

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

123 answer= 

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

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

Помогите?

1

2 ответа на вопрос

2
Marek Rost

My guess would be that the instance of bash, in which you are executing the xterm command, already resolves the $ANSWER variable before passing it to xterm.

Either escape the dollar symbol or use single quotes around the expressions. This appears to work in my case.

Update - syntax:

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

or

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

This is equivalent of your syntax if ANSWER is empty before xterm call:

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

As you can see the variable is resolved to the value and never enters the xterm. Also the bash running inside your xterm command is completly separated, variables or their values from inside cannot be easily passed outside it's scope.

Можете ли вы показать мне синтаксис, который вы используете? Я пробовал xterm -e "echo 123; читать переменную; echo '$ variable'; читать паузу", но мне все равно не повезло. cedenker 7 лет назад 0
Я подтвердил, что переменная установлена ​​до вызова xterm. Я устанавливаю переменную перед xterm, затем читаю переменную 2 раза в xterm, и когда я распечатываю ее, она содержит значение, установленное до вызова xterm. cedenker 7 лет назад 0
Да, это ожидаемое поведение - перед вызовом xterm переменная заменяется ее значением. Marek Rost 7 лет назад 0
0
Toby Speight

It's a quoting problem:

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

You need the shell inside the xterm to see a literal $ - not have it expanded by your current shell.