Was ist der Unterschied zwischen den Optionen -e und -x für das Gnome-Terminal?

11

Manpages geben an:

-e, --command=STRING
Execute the argument to this option inside the terminal.
-x, --execute
Execute the remainder of the command line inside the terminal.

Worauf bezieht sich die "Befehlszeile" im zweiten Beispiel? Und was ist sein "Rest"? Könnten Sie bitte ein Beispiel geben, in dem sich diese beiden Optionen unterscheiden? Oder sind sie im Grunde gleich?

Stackzebra
quelle
1
Nicht genau , aber fanden diese superuser.com/questions/198015/...
rɑːdʒɑ
Tolle erste Frage.
Jared Smith

Antworten:

16

Erwägen:

gnome-terminal -x sleep 10m --version
gnome-terminal -e 'sleep 10m' --version

Im ersten Beispiel wird alles danach -xfür den auszuführenden Befehl verwendet. Das GNOME-Terminal wird also sleep 10m --versionals Befehl ausgeführt. --versionIn diesem Fall wird es Teil des Befehls, der vom GNOME-Terminal ausgeführt wird.

Im zweiten Fall wird nur das einzelne Zeichenfolgenargument to -eals Befehl verwendet, sonst nichts. Also --versionhier ist tatsächlich eine Option , um GNOME - Terminal.

Die erste kann nützlicher sein, wenn Sie eine Befehlskette ausführen möchten:

gnome-terminal -x bash -c 'command 1; command 2; ...'

Dies ist schwierig zu handhaben -e, da der gesamte Befehl eine einzelne Zeichenfolge sein muss, sodass Sie das Ganze zitieren müssen. Dies bedeutet wiederum, dass Sie bei Anführungszeichen und Variablenerweiterungen und dergleichen vorsichtiger sein müssen:

gnome-terminal -e "bash -c 'command 1 $foo; command 2; ...'"

Hier $foowird durch die aktuelle Shell erweitert.

gnome-terminal -e 'bash -c "command 1 | awk '\''{print $NF}'\''"' 

Die Verwendung 'innerhalb der Befehlszeichenfolge ist mit lästigen Anführungszeichen verbunden.

Olorin
quelle
5
Ich sehe jetzt. Es scheint, dass die Option -x wahrscheinlich als bequemer Weg erfunden wurde, um Probleme mit Anführungszeichen zu vermeiden.
Stackzebra