Beim Ausführen eines Lesebefehls innerhalb eines xterm -e wird das Ergebnis des Lesens nicht gespeichert

362
cedenker

Wenn Sie Folgendes ausführen, #!/bin/bash

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

Ich erhalte diese Ergebnisse in einem Xterm-Fenster (egal, was ich für das Lesen eingebe).

123 answer= 

Es speichert also meine Eingabe niemals in der Variablen ANSWER.

Ich bin sicher, es hat etwas mit dem Ausführen mehrerer Befehle zu tun xterm -e.

Hilfe?

1

2 Antworten auf die Frage

2
Marek Rost

Meine Vermutung wäre, dass die Instanz von bash, in der Sie den Befehl xterm ausführen, die $ANSWERVariable bereits auflöst, bevor Sie sie an xterm übergeben.

Entkommen Sie entweder dem Dollarsymbol oder verwenden Sie Anführungszeichen um die Ausdrücke. Das scheint in meinem Fall zu funktionieren.

Update - Syntax:

xterm -e "Echo 123; LESE ANTWORT; Echoantwort = \ $ ANSWER; Schlaf 5"

oder

xterm -e 'Echo 123; ANTWORT lesen; Echoantwort = $ ANSWER; Schlaf 5'

Dies entspricht Ihrer Syntax, wenn ANSWER vor dem Aufruf von xterm leer ist:

xterm -e "Echo 123; ANTWORT lesen; Echoantwort =; Schlaf 5"

Wie Sie sehen können, wird die Variable in den Wert aufgelöst und geht niemals in das X-Feld ein. Die in Ihrem xterm-Befehl ausgeführte Bash ist vollständig getrennt, Variablen oder deren Werte können nicht ohne weiteres außerhalb ihres Gültigkeitsbereichs übergeben werden.

Können Sie mir die Syntax zeigen, die Sie verwenden? Ich habe xterm -e "echo 123" ausprobiert; Variable lesen; '$ variable' lesen; Pause lesen "und hatte trotzdem kein Glück. cedenker vor 7 Jahren 0
Ich habe bestätigt, dass die Variable vor dem Aufruf des xterm gesetzt ist. Ich setze die var vor dem xterm und lese die Variable ein zweites Mal innerhalb des xterm. Wenn ich sie ausdrucken möchte, enthält sie den Wert, der vor dem Aufruf des xterm gesetzt wurde. cedenker vor 7 Jahren 0
Ja, das ist das erwartete Verhalten - bevor der Aufruf von xterm erfolgt, wird die Variable durch ihren Wert ersetzt. Marek Rost vor 7 Jahren 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.