Atualizando o título do terminal em interrupções de armadilha de depuração

3

É possível atualizar títulos de terminal usando a seguinte sintaxe:

echo -ne "3]0;TITLE\a"

em que \a também pode ser .bashrc7 . Para atualizar dinamicamente o título da janela (no início do processo), coloquei o seguinte no meu %code% (inspirado por esta resposta , simplificado):

MY_TRAP_DEBUG() {
    echo -ne "3]0; ${BASH_COMMAND} \a"
}
trap MY_TRAP_DEBUG DEBUG

Funciona bem. No entanto, agora, quando quero imprimir a saída colorida:

echo -e "3[0;33m SOME YELLOW TEXT"

, a saída contém o comando e resulta em salada ascii: veja a captura de tela abaixo.

  1. Por quê?
  2. Como corrijo isso?
por Blauhirn 03.06.2017 / 07:09

1 resposta

3

São duas perguntas:

  • por quê?

    as sequências de escape não são aninhadas . A sequência de títulos começa com 3]0; e termina com \a ou qualquer outra sequência de controle .

  • como você conserta isso?

    Você poderia limpar o comando bash atribuindo isso a uma variável e usando a substituição de parâmetro do shell para remover caracteres de escape (e \a ASCII BEL). Apenas para deixá-lo bonito, você também deve remover os colchetes ( [ ou ] ) após um caractere de escape, bem como os parâmetros numéricos que pode seguir.

Alguém pode fornecer um exemplo usando BASH_REMATCH (definido como um efeito colateral de correspondência regex) e usar isso como a palavra em uma substituição ${parameter##word} ...

    
por 03.06.2017 / 14:18