Qual é a diferença entre as opções -e e -x para o gnome-terminal?


11

Estado das páginas de manual:

-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 que se refere a "linha de comando" no segundo exemplo? E qual é o seu "restante"? Você poderia dar um exemplo em que essas duas opções diferem? Ou eles são basicamente os mesmos?


1
Não exatamente, mas encontrei este superuser.com/questions/198015/…
rɑːdʒɑ 6/18

Ótima primeira pergunta.
Jared Smith

Respostas:


16

Considerar:

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

No primeiro exemplo, tudo depois -xé usado para que o comando seja executado. Portanto, o Terminal GNOME será executado sleep 10m --versioncomo o comando. --versionnesse caso, torna-se parte do comando a ser executado pelo Terminal GNOME.

No segundo, apenas o argumento de cadeia única -eé usado como comando, nada mais. Então, --versionaqui está uma opção para o Terminal GNOME.

O primeiro pode ser mais útil se você deseja executar uma cadeia de comandos:

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

Isso é difícil -e, porque o comando inteiro precisa ser uma única sequência, portanto, você terá que citar a coisa toda. Por sua vez, isso significa que você precisa ter mais cuidado com cotações e expansão de variáveis ​​e assim:

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

Aqui, $fooserá expandido pelo shell atual.

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

O uso 'dentro da cadeia de comando envolve manipulação irritante de cotações.


5
Eu vejo agora. Parece que a opção -x foi provavelmente inventada como uma maneira conveniente de evitar problemas com aspas.
stackzebra
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.