Como alterar o título da guia do terminal atual usando apenas a linha de comando

32

Nenhuma das respostas postadas atualmente funciona / responde a pergunta.

De acordo com a minha pergunta original, nem a definição de PS1 nem PROMPT_COMMAND teve qualquer efeito.

Usando apenas um comando no prompt de comando, como altero o título da guia do terminal atual?

Muitas postagens sugerem isso:

echo -en "3]0;New terminal title\a"

mas não faz nada.

Nenhuma das respostas atuais funciona (algumas não respondem à pergunta), portanto, para maior clareza:

  • Quando o título for alterado, não quero que mude se eu alterar o diretório etc.
  • Eu não quero o título mesmo em todas as guias. Eu só quero definir o título para a guia Eu corro o comando em
  • Eu quero várias guias para cada um ter diferentes títulos

Além disso, a variável PROMPT_COMMAND não está definida nas minhas sessões de terminal. Se eu definir:

PROMPT_COMMAND='echo -en "3]0;New terminal title\a"'

não tem efeito.

Qual é o comando correto?

FYI, a saída de uname -a é:

Linux d136172 3.13.0-45-generic #74-Ubuntu SMP Tue Jan 13 19:36:28 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

    
por Bohemian 16.06.2015 / 04:48

10 respostas

17

do @Maythux, este funciona para as minhas necessidades para desconsiderar o meu diretório atual no terminal.

PROMPT_COMMAND='echo -en "3]0;New terminal title\a"'

Instrução

Altere a string em "Novo nome do terminal" com $("pwd") :

PROMPT_COMMAND='echo -en "3]0; $("pwd") \a"'

Isso alterará automaticamente o título mesmo quando você adicionar uma nova guia.

Eu uso a configuração abaixo , que parece melhor, você também pode jogar bash programação e definir o seu próprio.

PROMPT_COMMAND='echo -en "3]0;$(whoami)@$(hostname)|$(pwd|cut -d "/" -f 4-100)\a"'

Adicione esta configuração ao seu ~/.bashrc .

    
por Kelly DC 22.08.2016 / 08:49
9

Quando o PS1 definir o título, qualquer tentativa de definir o título usando um comando ou PROMPT_COMMAND falhará, pois o prompt é impresso depois de todos eles. Por esse motivo, prefiro manter um prompt simples ao testar os títulos ( PS1=$; unset PROMPT_COMMAND ).

    
por muru 22.06.2015 / 02:31
5

De link , uma solução específica do bash é criar uma função personalizada (veja por exemplo este como fazer ) como

# function to set terminal title  
function set-title() {
  if [[ -z "$ORIG" ]]; then
    ORIG=$PS1
  fi
  TITLE="\[\e]2;$*\a\]"
  PS1=${ORIG}${TITLE}
}

que permite chamar set-title <name you want to set it to>

    
por WillC 24.02.2017 / 01:31
4

É muito provável que PROMPT_COMMAND esteja definido e esteja sobrescrevendo sua opção de título toda vez que o prompt for exibido. Tente desativá-lo e, em seguida, emitir seu comando de título:

PROMPT_COMMAND=
echo -en "3]0;New terminal title\a"
    
por John1024 16.06.2015 / 05:22
3

Você pode fazer isso, seja na CLI ou na GUI (suponho que você esteja usando o gnome-terminal, você pode fazer para outros apenas substituir o nome do aplicativo):

Na CLI, execute o comando:

gconftool-2 --set /apps/gnome-terminal/profiles/Default/title --type=string "New Terminal Name"

Observação: o novo nome é aplicado a todas as instâncias das guias do terminal e não à única guia atual.

OudaGUI:

VáparaMenu:Terminal->Definirtítulo->Digiteumnovotítuloesalve.

AgoraPorqueseucomandonãofunciona?

Vocêdeveadicionaressalinhaaoarquivo.bashrcenãodiretamenteaoseuterminal.

gedit.bashrc

Adicioneestalinha:

PROMPT_COMMAND='echo-en"3]0;New terminal title\a"'

Em seguida, salve e crie o arquivo bashrc.

source .bashrc
    
por Maythux 16.06.2015 / 08:28
2

Instruções

  1. Adicione settitle () ao seu .bashrc .
  2. source ~/.bashrc
  3. settitle Banana

settitle ()

function settitle()
{
    if [ $# -eq 0 ]
        then
        eval set -- "\[email protected]\h: \w"
    fi

    case $TERM in
        xterm*) local title="\[3]0;[email protected]
function settitle()
{
    if [ $# -eq 0 ]
        then
        eval set -- "\[email protected]\h: \w"
    fi

    case $TERM in
        xterm*) local title="\[3]0;[email protected]%pre%7\]";;
        *) local title=''
    esac
    local prompt=$(echo "$PS1" | sed -e 's/\\[\033\]0;.*\007\\]//')
    PS1="${title}${prompt}"
}
7\]";; *) local title='' esac local prompt=$(echo "$PS1" | sed -e 's/\\[\033\]0;.*\007\\]//') PS1="${title}${prompt}" }
    
por earthmeLon 16.06.2015 / 05:42
2

Esse segmento pode ser um pouco antigo, mas aqui está uma solução que funciona para mim:

link

Simply edit your $HOME/.bashrc file and add the following function:
set-title(){
ORIG=$PS1
TITLE="\e]2;[email protected]\a"
PS1=${ORIG}${TITLE}
}

Now whenever you want to set the title of your terminal, just enter something like:
set-title "my awesome terminal title"

    
por Sjoerd 17.05.2018 / 10:49
1

Usando bash, wmctrl, xprop, ps

1) Para um programa ativo de longa duração:

Por exemplo, inicie um programa (ranger) em execução em um terminal, iniciado a partir da área de trabalho, altere o título uma vez, após algum atraso (5 segundos) quando o programa for iniciado:

startranger.sh:

#!/bin/bash
/usr/local/bin/changetitle.sh 5 ranger
/usr/local/bin/ranger

changetitle.sh:

#!/bin/bash
delay="$1"
shift
wintitle="$*"
winid='xprop -root | grep _NET_ACTIVE_WINDOW | head -1 | awk '{print $5}' | sed 's/,//' | sed 's/^0x/0x0/''
/bin/bash -c "sleep $delay; wmctrl -i -r $winid -N \"$wintitle\"" &

2) Se você estiver executando uma sessão de terminal sem executar um programa ativo, atualize o título em um loop que termina quando o terminal sai:

changetitleloop.sh 1 maintenance for server

executar o acima irá atualizar o título do terminal atual a cada 1 segundo, mesmo se você cd (pode mudá-lo várias vezes), usando:

changetitleloop.sh

#!/bin/bash
interval="$1"
shift
wintitle="$*"
termpid="$(ps -p $$ -o ppid= | sed -e 's/^[ \t]*//')"
winid='xprop -root | grep _NET_ACTIVE_WINDOW | head -1 | awk '{print $5}' | sed 's/,//' | sed 's/^0x/0x0/''
/bin/bash -c "ss=\$$; echo \$ss > /tmp/term-$termpid.pid; while x=\$(wmctrl -i -r $winid -N \"$wintitle\"); ret=\$?; sleep $interval; owner=\$(cat /tmp/term-$termpid.pid); [ \$ret -eq 0 ] && [ \$ss -eq \$owner ]; do continue; done;" &
    
por Der Bosst 16.04.2018 / 17:17
1

Baseado na resposta @muru

PS1 sets the title, any attempt to set the title using a command or PROMPT_COMMAND will fail, since the prompt is printed after all of them

Isso funcionou no meu Elementary S.O:

PS1='\u:\W\$ '
PROMPT_COMMAND='echo -en "3]0;New terminal title\a"'

Eu executo isso em cada nova guia:

E, como mostra a imagem anterior, tenho várias guias com nome exclusivo.

16.04.1-Ubuntu

    
por JRichardsz 15.01.2018 / 15:32
0

Uma solução pode ser instalar a última versão do tmux .

O tmux permite definir títulos por painel, ativados por este comando:

tmux set -g pane-border-status top

Eles também podem ser exibidos na parte inferior.

Os títulos são definidos por meio de uma sequência de escape:

printf '3]2│;%s3\' 'My Pane Title'

Cada painel pode ter seu próprio título e todos os títulos são exibidos o tempo todo.

Os painéis tmux ficarão assim:

──0 "My Pane Title"──────┬──1 "Another Pane"───────
>                        │>

Isso foi testado no linux mint 18.2 (como o Ubuntu) com o tmux 2.8. A instalação foi de um tarball.

Se você quer ser mais produtivo em seu terminal, o tmux também oferece muitos outros recursos.

    
por 03.02.2019 / 08:04