Terminal GNOME - nome do processo no título da guia


9

Como posso colocar o nome do processo em execução no título da guia Terminal GNOME (ou na barra de título quando há apenas uma guia)?

- ATUALIZAÇÃO -

Para esclarecer, quero que o título da guia seja atualizado quando executar um processo, por exemplo:

# title is currently "bash"
$ find / -name foo # while searching for foo, title is "find"
$ # title is once again "bash"
$ less /proc/cpuinfo # title changes to "less"
$ man ls # title changes to man
$ # title returns to "bash"

Respostas:


8

Encontrei. Este site fornece uma boa explicação para uma solução.
No seu bashrc, seria semelhante a:

case "$TERM" in
xterm*|rxvt*)
    set -o functrace
    trap 'echo -ne "\e]0;$BASH_COMMAND\007"' DEBUG
    PS1="\e]0;\s\007$PS1"
    ;;
*)
    ;;
esac

Pessoalmente, acho que não o adicionaria ao meu bashrc, porque o DEBUG combinado com o rastreamento lança um monte de lixo quando todo o shell é iniciado. Se você pode conviver com isso, na verdade funciona. Ele exibe o comando inteiro, no entanto, não apenas a primeira palavra.


2
Obrigado por fazer uma boa pergunta. Parecia uma pergunta simples a princípio ... Após os primeiros 10 minutos, estava começando a me deixar louco! Foi por isso que pensei que era uma boa pergunta - parece simples, mas me forçou a aprender algo mais profundo sobre a interação entre o shell, o terminal e os sinais.
DaveParillo

por que a PS1atribuição? resulta em palavrões para mim, e realmente não parece necessário aqui ...?
phil294

Apenas erros para mim.
Kzqai

4

Bem, já que todo mundo já parece conhecer a solução de David Pashley, estou surpreso que demorei tanto para encontrar essa porque é quase tão antiga.

Essa solução, na verdade, cuida do lixo de spam de conclusão do bash.

Para ser claro: não fiz nada sozinho aqui, a não ser pesquisar. Todo o crédito é para Marius Gedminas .

Isso funciona perfeitamente para mim com o Gnome-Terminal / Terminator

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'

    # Show the currently running command in the terminal title:
    # http://www.davidpashley.com/articles/xterm-titles-with-bash.html
    show_command_in_title_bar()
    {
        case "$BASH_COMMAND" in
            *\033]0*)
                # The command is trying to set the title bar as well;
                # this is most likely the execution of $PROMPT_COMMAND.
                # In any case nested escapes confuse the terminal, so don't
                # output them.
                ;;
            *)
                echo -ne "\033]0;${USER}@${HOSTNAME}: ${BASH_COMMAND}\007"
                ;;
        esac
    }
    trap show_command_in_title_bar DEBUG
    ;;
*)
    ;;
esac

Além disso, este é um post cruzado, porque acabei de descobrir sobre isso e queria compartilhar e acho que é útil aqui também.


2

O abaixo deve funcionar. Eu tenho a função em um .bash_functionsarquivo e a fonte no .bashrcarquivo antes da configuração $PROMPT_COMMAND.

function term_title
{
        history 1 | awk '{print $2}';
}

PROMPT_COMMAND='echo -ne "\033]0;"$(term_title)"\007"'

11
Você está perto, mas eu não tenho muito melhor. Isso lhe dará o último comando executado , mas não é exatamente o que é adurity. Eu pensei em mudar term_title para: `if [jobs]; então história 1 | awk '{print $ 2}'; caso contrário, echo -ne 'bash em' fi 'funcionaria, mas é inconsistente em capturar processos com vida útil curta e ainda não retorna quando o processo é concluído. Eu não sei sobre o funcionamento interno do xterm para saber como mexer com esses gatilhos / eventos.
DaveParillo 18/09/09

O bash executa $ PROMPT_COMMAND imediatamente antes de exibir o prompt, portanto é o melhor que posso fazer com essa abordagem. Pode haver outros gatilhos que podem ser executados logo após você pressionar Enter, mas eu não os conheço.

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.