Como fazer com que a barra superior do meu terminal diga qual comando está sendo executado?

13

Costumo executar comandos em paralelo que demoram muito tempo para terminar e, às vezes, perco o controle do que está sendo executado, pois eles emitem basicamente o mesmo tipo de informação na tela.

Você conhece alguma maneira de descobrir qual comando está sendo executado em qual terminal?

Luca Minciullo
fonte
1
Não tenho certeza se isso ainda funciona, mas isso pode ajudar também, além da excelente resposta de @dessert. → askubuntu.com/questions/774532/…
Videonauth

Respostas:

12

Retirado do Bash - Atualize o título do terminal executando um segundo comando · U&L e ligeiramente alterado:

trap 'echo -ne "\033]2;$(history 1 | sed "s/^[0-9 ]* \+//")\007"' DEBUG

Este (ab) usa o DEBUGsinal como um gatilho para atualizar o título com a última entrada do seu histórico, ou seja, o último comando que você executou, por meio de uma sequência de controle do XTerm . Adicione a linha ao seu ~/.bashrcpara ativar o recurso em cada nova janela do terminal.

Para imprimir outra saída de comando ao lado do título, diga o diretório atual pwdseguido de ":" e o comando em execução no momento, recomendo usar printfo seguinte:

trap 'echo -ne "\033]2;$(printf "%s: %s" "$(pwd)" "$(history 1 | sed "s/^[0-9 ]* \+//")")\007"' DEBUG

Alguns emuladores de terminal permitem que você especifique um título dinâmico e até mesmo dê o nome do comando como uma opção, para que você nem precise se preocupar - eu procurei e encontrei nas yakuakeconfigurações de perfil.

sobremesa
fonte
2

O título da janela do terminal pode ser alterado alterando o valor da variável $PS1- a sequência de prompt principal. [1] [2] . Poderíamos combinar esta solução com a ideia de usar o comando da resposta do Dessert . history


Abordagem 1: atualize o valor $PS1automaticamente. (Atualizar)

Adicione as seguintes linhas na parte inferior do arquivo ~/.bashrc:

# Change the terminal window title, based on the last executed command
rtitle() {
        # If the variable $PS1_bak is unset,
        # then store the original value of $PS1 in $PS1_bak and chang $PS1
        # else restore the value of $PS1 and unset @PS1_bak
        if [ -z "${PS1_bak}" ]; then
                PS1_bak=$PS1
                PS1+='\e]2;$(history 1 | sed "s/^[0-9 ]* \+//")\a'
        else
                PS1=$PS1_bak
                unset PS1_bak
        fi
};
export -f rtitle        # Export the function to be accessible in sub shells
#rtitle                 # Uncomment this line to change the default behaviour

Em seguida, source ~/.bashrcou apenas abra um novo terminal e use a função desta maneira:

  • Execute rtitlepara começar a alterar o título da janela do terminal automaticamente, com base no último comando executado.
  • Execute rtitlemais uma vez para retornar ao comportamento padrão.

Abordagem 2: atualize o valor $PS1manualmente. (Resposta inicial)

Adicione as seguintes linhas na parte inferior do arquivo ~/.bashrc:

set-title() {                                                                                 # Set a title of the current terminal window
        [[ -z ${@} ]] && TITLE="$(history 2 | head -1 | sed "s/^[0-9 ]* \+//")" || TITLE="$@" # If the title is not provided use the previous command
        [[ -z ${PS_ORIGINAL} ]] && PS_ORIGINAL="${PS1}" || PS_ORIGINAL="${PS_ORIGINAL}"       # Use the original value of PS1 for each future change
        PS1="${PS_ORIGINAL}"'\e]2;'"$TITLE"'\a'                                               # Change the prompt (the value of PS1)
}; export -f set-title

Em seguida, source ~/.bashrcou apenas abra um novo terminal e use a função desta maneira:

  • set-title <something>alterará o título da janela do terminal para <something>.
  • set-title sem argumento mudará o título da janela do terminal para o comando anterior.

Referências e exemplos:

pa4080
fonte