Quelle est la différence entre les options -e et -x pour gnome-terminal?

11

Les pages de manuel indiquent:

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

À quoi fait référence la "ligne de commande" dans le deuxième exemple? Et quel est son "reste"? Pourriez-vous s'il vous plaît donner un exemple où ces deux options diffèrent? Ou sont-ils fondamentalement les mêmes?

stackzebra
la source
1
Pas exact mais trouvé ce superuser.com/questions/198015/…
rɑːdʒɑ
Grande première question.
Jared Smith

Réponses:

16

Considérer:

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

Dans le premier exemple, tout ce qui suit -xest utilisé pour l'exécution de la commande. Le terminal GNOME s'exécutera donc sleep 10m --versioncomme la commande. --versiondans ce cas fait partie de la commande à exécuter par GNOME Terminal.

Dans le second, seul l'argument de chaîne unique -eest utilisé comme commande, rien d'autre. --versionVoici donc en fait une option pour GNOME Terminal.

Le premier peut être plus utile si vous souhaitez exécuter une chaîne de commandes:

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

C'est difficile à faire -e, car la commande entière doit être une seule chaîne, vous devrez donc citer le tout. Cela signifie à son tour que vous devez faire plus attention aux guillemets et à l'expansion des variables et autres:

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

Ici, $foosera développé par le shell actuel.

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

L' utilisation 'dans la chaîne de commande implique la manipulation de devis ennuyeux.

Olorin
la source
5
Je vois maintenant. Il semble que l'option -x ait probablement été inventée comme un moyen pratique d'éviter les problèmes de guillemets.
stackzebra