В чем разница между опциями -e и -x для gnome-терминала?


11

Страницы руководства:

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

Что означает «командная строка» во втором примере? И каков его «остаток»? Не могли бы вы привести пример, где эти два варианта отличаются? Или они в основном одинаковые?


1
Не точно, но нашел этот superuser.com/questions/198015/…
rɑːdʒɑ

Отличный первый вопрос.
Джаред Смит

Ответы:


16

Рассмотреть возможность:

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

В первом примере все после -xиспользуется для выполнения команды. Поэтому GNOME Terminal будет работать sleep 10m --versionкак команда. --versionв этом случае становится частью команды, запускаемой GNOME Terminal.

Во втором случае в -eкачестве команды используется только один строковый аргумент , ничего больше. Так --versionчто на самом деле здесь есть опция для GNOME Terminal.

Первый может быть более полезным, если вы хотите запустить цепочку команд:

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

Это трудно сделать -e, потому что вся команда должна быть единственной строкой, поэтому вам придется заключать в кавычки всю эту вещь. Это, в свою очередь, означает, что вам нужно быть более осторожным с кавычками и расширением переменных, и такими:

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

Здесь $fooбудет развернута текущая оболочка.

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

Использование 'внутри командной строки включает в себя раздражающую обработку кавычек.


5
Я вижу сейчас. Похоже, опция -x была изобретена как удобный способ избежать проблем с кавычками.
стекабра
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.