在 xterm -e 中执行读取命令时,它不会存储读取的结果

在 xterm -e 中执行读取命令时,它不会存储读取的结果

在运行以下命令时#!/bin/bash

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

我在 xterm 窗口中得到这些结果(无论我输入什么来读取)。

123
answer=

所以它永远不会将我的输入存储到变量ANSWER中。

我确信这与运行多个命令有关xterm -e

帮助?

答案1

我的猜测是,您在其中执行 xterm 命令的 bash 实例$ANSWER在将该变量传递给 xterm 之前已经解析了该变量。

要么转义美元符号,要么在表达式两边使用单引号。这似乎对我的情况有效。

更新-语法:

xterm -e "echo 123;读取答案;echo answer=\$ANSWER;sleep 5"

或者

xterm -e 'echo 123;读取答案;echo answer=$ANSWER;sleep 5'

如果在 xterm 调用之前 ANSWER 为空,则这等效于您的语法:

xterm -e "echo 123;阅读答案;echo answer=;sleep 5"

如您所见,变量被解析为值,并且永远不会进入 xterm。此外,在 xterm 命令内运行的 bash 是完全分离的,变量或其值无法轻易传递到其范围之外。

答案2

这是一个引用问题:

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

您需要内部的 shellxterm才能看到文字$- 而不是通过当前的 shell 来扩展它。

相关内容