Яка різниця між параметрами -e та -x для gnome-terminal?


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 запускається sleep 10m --versionяк команда. --versionу цьому випадку стає частиною команди, яку слід виконувати терміналом GNOME.

По-друге, -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, ймовірно, був винайдений як зручний спосіб уникнути проблем з цитатами.
stackzebra
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.