Jaka jest różnica między opcjami -e i -x dla gnome-terminal?

11

Stan stron podręcznika:

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

Do czego odnosi się „linia poleceń” w drugim przykładzie? A jaka jest jego „reszta”? Czy możesz podać przykład, w którym te dwie opcje się różnią? Czy są w zasadzie takie same?

stackzebra
źródło
1
Nie do
końca,
Świetne pierwsze pytanie.
Jared Smith

Odpowiedzi:

16

Rozważać:

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

W pierwszym przykładzie wszystko, co następuje, -xjest używane do wykonania polecenia. Terminal GNOME będzie działał sleep 10m --versionjako polecenie. --versionw takim przypadku staje się częścią polecenia uruchamianego przez terminal GNOME.

Po drugie, -ejako polecenie używany jest tylko argument o pojedynczym ciągu , nic więcej. Więc --versiontutaj jest właściwie opcja dla GNOME Terminal.

Pierwszy może być bardziej przydatny, jeśli chcesz uruchomić łańcuch poleceń:

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

Jest to trudne do wykonania -e, ponieważ całe polecenie musi być pojedynczym ciągiem, więc będziesz musiał zacytować całość. To z kolei oznacza, że ​​musisz bardziej uważać na cytaty i zmienne rozwinięcie i takie:

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

Tutaj $foozostanie rozszerzony o bieżącą powłokę.

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

Używanie 'wewnątrz ciągu poleceń wiąże się z irytującą obsługą cytatów.

Olorin
źródło
5
Teraz widzę. Wygląda na to, że opcja -x została prawdopodobnie wynaleziona jako wygodny sposób na uniknięcie problemów z cudzysłowami.
stackzebra