Por que sufixar um e comercial no final de um comando GTK, resulta em saída extra no próximo comando após o fechamento?

2

Por exemplo:

$ cd ~/code/someFolder
~/code/someFolder$ gitk --all& # launches a gtk window of gitk
[1] 9335 # what is this in the first place

agora eu vou fazer algum trabalho dentro da janela gtk, depois feche

~/code/someFolder$ echo 'foobar'
foobar
[1]+  Done                    gitk --all # this extra output

Eu tenho um pressentimento de que o "e" comercial de alguma forma está "segurando" o processo e fechá-lo no gtk termina o processo resultando na saída ... mas essa é uma explicação muito não científica.

PS: Desculpe pela questão pesada, não consegui pensar em uma maneira melhor de expressar isso.

    
por Aditya M P 31.01.2014 / 21:38

1 resposta

1

Na sua pergunta, existem alguns equívocos. Em primeiro lugar, esse comportamento não está limitado aos comandos do Gtk. Em segundo lugar, a notificação não é enviada após o "próximo comando", mas no próximo prompt (digamos, assim que você digitar a tecla Enter).

O que você está fazendo é chamado Job Control . No bash você pode enviar comandos para o "background" para que eles não bloqueiem a linha de comando. Por exemplo, tente executar gedit no terminal. A janela do Gedit deve aparecer e a linha de comando deve ser "bloqueada", ou seja, você não pode digitar nenhum novo comando a menos que você feche o Gedit.

Uma solução para esse comportamento de bloqueio de processos "de longa execução" é enviar seus comandos para o segundo plano na chamada. Desta forma, o comando não irá bloquear e você poderá continuar trabalhando na linha de comando.

Uma maneira de enviar um comando para o segundo plano é usando o & após o comando. Continuando com o exemplo do Gedit, você pode iniciá-lo no plano de fundo executando

gedit &

Agora você notará que o prompt de comando é impresso imediatamente e você pode executar novos comandos (compare isso com simplesmente executando gedit sem "e" comercial). Você também notará as informações extras sobre o novo "trabalho" que acabou de criar: o número do trabalho entre parênteses e seu PID.

Quando o trabalho terminar (normalmente ou porque você o matou), o bash irá notificá-lo com algo semelhante a:

[1]+  Done                    gedit &

(O 1 é o número do trabalho e à direita você tem o comando com o qual você criou este trabalho, caso tenha esquecido: -)

Se você tiver vários trabalhos em segundo plano, poderá usar o comando jobs para obter uma lista com seus status.

Concluindo, você não precisa adicionar o "e" comercial a menos que queira executar outro comando imediatamente.

Para referências e outros aspectos interessantes sobre o controle do trabalho, leia:

por edwin 01.02.2014 / 01:50