Qual è la differenza tra le opzioni -e e -x per gnome-terminal?


11

Stato delle pagine 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 cosa si riferisce la "riga di comando" nel secondo esempio? E qual è il suo "resto"? Potresti per favore fare un esempio in cui queste due opzioni differiscono? O sono sostanzialmente gli stessi?


1
Non esatto ma
ho

Ottima prima domanda.
Jared Smith,

Risposte:


16

Prendere in considerazione:

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

Nel primo esempio, tutto ciò che segue -xviene utilizzato per l'esecuzione del comando. Quindi GNOME Terminal verrà eseguito sleep 10m --versioncome comando. --versionin questo caso diventa parte del comando che deve essere eseguito dal Terminale GNOME.

Nel secondo, -ecome comando viene utilizzato solo l'argomento stringa singola , nient'altro. Quindi --versionqui è in realtà un'opzione per GNOME Terminal.

Il primo può essere più utile se si desidera eseguire una catena di comandi:

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

Questo è difficile da fare -e, perché l'intero comando deve essere una singola stringa, quindi dovrai citare il tutto. Questo a sua volta significa che devi stare più attento alle virgolette e all'espansione delle variabili e così:

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

Qui, $fooverrà espanso dalla shell corrente.

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

L'uso 'all'interno della stringa di comando implica una fastidiosa gestione delle offerte.


5
Ora vedo. Sembra che l'opzione -x sia stata probabilmente inventata come un modo conveniente per evitare i problemi con le virgolette.
Stackzebra,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.