¿Cuál es la diferencia entre las opciones -e y -x para gnome-terminal?


11

El estado de las páginas man:

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

¿A qué se refiere la "línea de comando" en el segundo ejemplo? ¿Y cuál es su "resto"? ¿Podría dar un ejemplo en el que estas dos opciones difieran? ¿O son básicamente lo mismo?


1
No es exacto, pero se encontró este superuser.com/questions/198015/...
rɑːdʒɑ

Gran primera pregunta.
Jared Smith

Respuestas:


16

Considerar:

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

En el primer ejemplo, todo lo que -xsigue se usa para ejecutar el comando. Entonces GNOME Terminal se ejecutará sleep 10m --versioncomo el comando. --versionen este caso se convierte en parte del comando que ejecutará GNOME Terminal.

En el segundo, solo -ese utiliza el argumento de cadena única como comando, nada más. Entonces, --versionaquí hay una opción para GNOME Terminal.

El primero puede ser más útil si desea ejecutar una cadena de comandos:

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

Esto es difícil de hacer -e, porque todo el comando debe ser una sola cadena, por lo que tendrá que citar todo. Esto, a su vez, significa que debe tener más cuidado con las cotizaciones y la expansión de variables y tales:

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

Aquí, $foose expandirá por el shell actual.

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

Usar 'dentro de la cadena de comando implica un manejo molesto de comillas.


55
Ya lo veo. Parece que la opción -x probablemente se inventó como una forma conveniente de evitar los problemas con las comillas.
stackzebra
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.