Como altero o prompt do bash no terminal gnome sem bagunçar o título do terminal no Ubuntu 16?

Como altero o prompt do bash no terminal gnome sem bagunçar o título do terminal no Ubuntu 16?

Não gosto que todos os caminhos de diretório longos ocupem o espaço do meu terminal, então os trunco ​​por meio de um script python. Editei o arquivo .bashrc e substituí o PS1 por

export PROMPT_COMMAND='PS1="$(python /home/vinay/bash_promt.py)"'.

E quando faço isso, o título do terminal não funciona mais. Ele simplesmente exibe Terminalo que é irritante. Posso alterar o título manualmente executando o seguinte comando no bash:

PROMPT_COMMAND='echo -ne "\033]0;CUSTOM TITLE\007"'

Existe uma maneira de definir o título do terminal para o prompt personalizado que está sendo definido no meu bash.

Responder1

Para o gnome-terminal, o título do terminal é definido por meio PROMPT_COMMANDdo qual é definido em /etc/profile.d/vte-2.91.sh.

PROMPT_COMMAND, conforme definido neste script, faz duas coisas:

  • altera o título do terminal usando a sequência de escape OSC 0 ( \033]0;NEW_TITLE\007),

  • altera a noção do terminal do diretório atual usando a sequência de escape OSC 7 ( \033]7;NEW_CURRENT_DIRECTORY\007, isso é fatorado na __vte_osc7função).

Se você remover o segundo do seu arquivo PROMPT_COMMAND, as janelas ou guias do terminal recém-abertas não abrirão no diretório onde você estava no terminal anterior. Muito provavelmente você não quer isso.

Portanto, em seus scripts de inicialização do shell, após o fornecimento, vte-2.91.shvocê deve construir seu preferido PROMPT_COMMANDque defina o título de maneira semelhante a vte-2.91.she defina o diretório de trabalho atual exatamente como é feito por padrão.

Não conheço nenhuma maneira de me referir ao PS1valor resolvido de (ou seja, depois de substituir o nome de usuário e tal) dentro PROMPT_COMMANDou em qualquer outro lugar (muito menos filtrar as sequências de escape, como mudanças de cores). Se você deseja ver a mesma string no seu prompt e no título da janela, acredito que você precisa duplicar a construção dessa string para PS1and PROMPT_COMMAND.

Responder2

Isso funcionará para você

abrir ~/.bashrc. Encontre a linha que diz:

PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"

Comente esta linha, colocando um #caractere na frente dela:

# PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"

Agora adicione esta linha (você pode colocá-la logo após a linha comentada):

PROMPT_COMMAND='echo -ne "\033]0;Custom Name\007"'

SubstituirCustom Namecom o que você deseja alterar para o título do Terminal.

Espero que isto ajude.

Responder3

A sequência de escape a ser usada éESC]2;novo títuloBELondeESCeBELsão os personagens de fuga e sino. Como \[\e]2;NEWTITLE\a\]. Usando sequências de escape #Bash, alterar o título no seu prompt é semelhante a:

export PS1='\[\e]2;new title\a\]prompt > ' referência do documento

Portanto, um exemplo de prompt bash truncado multicolorido que também possui um título de terminal personalizado é:

export PS1='\[\e]2;$PWD\a\]\e[93m$USER\e[97m@\e[90m$HOSTNAME \e[93m$ \e[0m'

Nesse exemplo, o título do terminal sempre refletirá o diretório de trabalho atual ( $PWD) e o prompt do terminal sempre terá a seguinte aparência, independentemente do diretório em que você estiver: user@hostname $.

Você pode substituir $PWDpor CUSTOM TITLEpara fazer com que o título do terminal sempre reflita CUSTOM TITLE.

Atualizar
Tenha cuidado ao não agrupar caracteres não impressos em \[e \]. Funciona sem ele e faço isso sem eles há anos. Porém, como descobri hoje com algumas configurações,pode causar alguns problemasno terminal. Abaixo está uma versão mais limpa usando variáveis ​​e agrupando os códigos de cores:

T_YELLOW='\[\e[93m\]'
T_WHITE='\[\e[97m\]'
T_GRAY='\[\e[90m\]'
T_DEFAULT='\[\e[0m\]'
T_TITLE='\[\e]2;$PWD\a\]'
export PS1="${T_TITLE}${T_YELLOW}$USER${T_WHITE}@${T_GRAY}$HOSTNAME${T_YELLOW} $ ${T_DEFAULT}"

informação relacionada