renomeia o nome da janela do tmux para prompt_command, ps1 ou hostname ssh remoto?

21

Eu adoraria poder ter o título da minha janela do tmux renomeado automaticamente para prompt_command, ps1 ou apenas o nome do host de uma máquina com o qual eu ssh . ter 9 janelas abertas rotuladas "ssh" é realmente inútil. Fazendo o trabalho sysadmin eu abro novas telas e ssh em torno de muito para renomeá-los manualmente.

Uma coisa que notei é que tmux atualiza o título da janela xterm , então acho que é necessário saber.

Qualquer ajuda? Eu estaria disposto a voltar para screen se eu pudesse obter esse recurso.

    
por user68782 23.02.2011 / 09:53

10 respostas

14

Não conheço nenhuma maneira de ver diretamente seu PS1 .

No entanto, tmux compreende os mesmos comandos para definir o nome da janela como screen .

Você pode definir uma função como esta em ~/.bashrc ou ~/.zshrc :

settitle() {
    printf "3k$13\"
}

e depois chame settitle de qualquer lugar.

Por exemplo, você poderia incluí-lo na sua variável PS1 , por exemplo,

PS1='$HOST:$PWD$(settitle $HOST:$PWD)$ '

ou via PROMPT_COMMAND :

PROMPT_COMMAND='$(settitle $HOST:$PWD)'
# and don't change PS1

Agora eu entendo que você tem tmux em execução na sua área de trabalho e deseja que os comandos ssh tenham o nome do host em vez de ssh , isso é muito mais fácil.

Dado que você adicionou settitle ao seu local ~/.bashrc , tudo o que você quer fazer é adicionar isso também:

ssh() {
    settitle "$*"
    command ssh "$@"
    settitle "bash"
}

Substitua o bash por zsh, ou algo mais apropriado, se necessário.

    
por 23.02.2011 / 11:54
31

tmux rename-window -t${TMUX_PANE} "Title Text"

Esta é a maneira correta de definir os títulos do tmux em uma janela. A variável $ TMUX_PANE é definida pelo tmux e é usada para diferenciar entre diferentes painéis.

    
por 08.10.2012 / 20:00
13

Apenas para pessoas que vieram aqui pesquisando como alterar o título de uma sessão do tmux:

Ctrl + B , $

Isto lhe dará um prompt, onde você pode renomear a sessão ativa.

Para alterar a janela ativa, use o komma:

Ctrl + B , ,

veja: Como eu renomeio uma sessão no tmux?

    
por 20.06.2016 / 19:32
7

Combinando as respostas de Mikel e de UtahJarhead, usei o seguinte em .zshrc para resolver este problema:

ssh() {
    tmux rename-window "$*"
    command ssh "$@"
    exit
}

Eu tenho a renomeação automática da janela ativada por padrão e não consigo encontrar uma maneira de reativá-la depois de sair do host remoto. Assim, acabei de sair da janela completamente - não é um problema para o meu fluxo de trabalho. Se você preferir renomeá-lo para, digamos, "bash", poderá substituir a linha exit por tmux rename-window "bash" .

    
por 05.12.2012 / 18:07
7

Em vez de exit ou tmux rename-window "bash" , você pode usar

ssh() {
    if [ "$(ps -p $(ps -p $$ -o ppid=) -o comm=)" = "tmux" ]; then
            tmux rename-window "$*"
            command ssh "$@"
            tmux set-window-option automatic-rename "on" 1>/dev/null
    else
            command ssh "$@"
    fi
}

Isso reativa a função normal que renomeia a janela automaticamente para os próximos comandos.

O bloco if impede (sem isso) renomear a janela tmux atual dos comandos ssh usados em outros shells (fora de tmux ).

    
por 29.08.2013 / 03:53
1

Eu sei que isso foi respondido há muito tempo, mas eu pensei em adicionar o que eu tinha manipulado e encontrado (com base na resposta aceita) .. Eu adicionei isso ao / etc / bashrc de todos os meus servidores (fácil de fazer com tecido, fantoche, etc)

settitle() {
    printf "3k$13\"
}
bash_prompt_command() {
    settitle "'hostname -s':$PWD"
}
PROMPT_COMMAND=bash_prompt_command

E define o nome da janela automaticamente na tela ou no tmux.

    
por 26.02.2013 / 17:10
1

Outra solução seria renomear a janela ativa para seu nome anterior, após a sessão ssh:

ssh() {

local code=0
local ancien

ancien=$(tmux display-message -p '#W')

if [ $TERM = tmux -o $TERM = tmux-256color ]; then

    tmux rename-window "$*"

    command ssh "$@"

    code=$?
else
    command ssh "$@"

    code=$?
fi

tmux rename-window $ancien

return $code
}
    
por 19.04.2018 / 10:08
0

Isso funciona em tmux 2.1 e com zsh localmente e em servidores:

ssh() {
    tmux set-option allow-rename off 1>/dev/null
    tmux rename-window "ssh/$*"
    command ssh "$@"
    tmux set-option allow-rename on 1>/dev/null
}

Eu tive que desabilitar a opção allow-rename manualmente antes de alterar o nome do Windows - caso contrário, ele foi alterado para o caminho atual na maioria dos meus servidores (também usando o zsh). A coisa boa é: se você reativar a opção permitir renomeação, ela funcionará imediatamente.

    
por 04.12.2015 / 19:29
0

Adicione isso a .profile ou .bashrc

# Change window name for 'tmux'
ssh() {
    if [ "$(ps -p $(ps -p $$ -o ppid=) -o comm=)" = "tmux" ]; then
        #tmux rename-window "$(echo $* | cut -d . -f 1)"
        tmux rename-window "$(echo $* | cut -d @ -f 2)"
        command ssh "$@"
        tmux set-window-option automatic-rename "on" 1>/dev/null
    else
        command ssh "$@"
    fi
}
    
por 22.12.2015 / 13:31
0

Eu observaria em todos esses exemplos com:

command ssh "$@"

Você pode querer pegar o código de saída e sair da função com ele, caso contrário, coisas como:

ssh server false

retornará 0.

command ssh"$@"
_exitcode=$?
#other code
exit $_exitcode

Irá sair do ssh com o código de retorno do ssh.

    
por 13.02.2018 / 00:08

Tags