web-dev-qa-db-fra.com

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

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 se réfère 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?

11
stackzebra

Considérer:

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

Dans le premier exemple, tout ce qui suit le -x est utilisé pour l'exécution de la commande. Le terminal GNOME exécutera donc sleep 10m --version en tant que commande. --version fait dans ce cas partie de la commande à exécuter par le terminal GNOME.

Dans le second, seul l'argument de chaîne unique à -e est utilisé comme commande, rien d'autre. Donc --version est 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; ...'

Ceci est difficile à faire avec -e, car toute la commande doit être une seule chaîne. Vous devrez donc tout citer. Cela signifie à son tour que vous devez faire plus attention aux guillemets et à l’expansion des variables, par exemple:

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

Ici, $foo sera développé par le shell actuel.

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

L'utilisation de ' dans la chaîne de commande implique une gestion des devis agaçante.

16
Olorin