Pergunta

É possível definir o título da tela usando um shell script?

Eu pensei em algo como enviar a chave comandos Ctrl + A mudar - A Name digite

Eu procurei por cerca de uma hora sobre como emular batidas de tecla em um script shell, mas não encontrou a resposta.

Foi útil?

Solução

Você pode definir o título da tela / xterm usando as seguintes linhas:

#!/bin/bash

mytitle="Some title"
echo -e '\033k'$mytitle'\033\\'

[UPDATE] - por pedido Eu também estou incluindo a solução proposta pela @Espo abaixo:

Dependendo da sua versão xterm ou sua distribuição Linux a linha acima pode ou não trabalho e você pode tentar os xterm-padrões:

#!/bin/bash

mytitle="Some title"
echo -e '\033]2;'$mytitle'\007'

Para saber mais sobre os detalhes ver: http: // www .faqs.org / docs / Linux-mini / Xterm-Title.html # s3 ou consultar a resposta por @Espo abaixo.

Outras dicas

A partir http://www.faqs.org/docs /Linux-mini/Xterm-Title.html#s3

seqüências xterm de fuga

janela e ícone títulos podem ser alteradas em um xterm em execução usando XTerm sequências de escape. Os seguintes seqüências são úteis a este respeito:

  • ESC]0;stringBEL - Defina o nome do ícone e título da janela para string
  • ESC]1;stringBEL - Defina o nome do ícone para string
  • ESC]2;stringBEL - Definir título da janela para string

onde ESC é o caractere de escape (\ 033), e BEL é o personagem sino (\ 007).

Impressão uma dessas sequências dentro o xterm fará com que a janela ou ícone título a ser alterado.

Nota: essas seqüências se aplicam a mais derivados xterm, tais como, nxterm cor-xterm e rxvt. outro terminal tipos costumam usar diferentes escapes; Vejo o apêndice para exemplos. Para o lista completa de sequências de escape xterm ver a ctlseq2.txt arquivo, que vem com a distribuição xterm, ou xterm.seq, que vem com o rxvt distribuição.

Imprimir as sequências de escape

Para obter informações que é constante durante todo o tempo de vida deste shell, tais como anfitrião e nome de usuário, ele será basta simplesmente ecoar a fuga string no arquivo de shell rc:

    echo -n "\033]0;${USER}@${HOST}\007"

deve produzir um título como username @ hostname, assumindo o shell variáveis ??$ USUÁRIO e US $ acolhimento, são definidos corretamente. As opções necessárias para eco pode variar de acordo com casca (ver exemplos abaixo).

Para obter informações que podem mudar durante a vida do shell, como atual diretório de trabalho, estes escapes realmente precisa ser aplicada sempre as rápidas mudanças. Desta forma, o string é atualizado com todos os comandos você emitir e pode manter o controle de informações tais como trabalho atual diretório, nome de usuário, nome da máquina, etc. Alguns escudos fornecer funções especiais para este fim, outros não e nós tem que inserir as sequências de título diretamente na sequência do prompt. Esta é ilustrado na próxima seção.

A seguir, são outras maneiras de roteiro a renomeação de títulos de tela:

Adicionando as seguintes configurações para .ssh/config define o título da tela automaticamente após a autenticação para um sistema usando SSH:

Host *
  PermitLocalCommand yes
  LocalCommand [ "$TERM" == 'screen' ] && echo -ne "\033k%h\033\\" 

Em vez de %h, que representa o nome da máquina que está a ligar com, você pode usar %n, que é o real nome / apelido que você usou para se conectar à máquina.

NOTA: Você precisa OpenSSH> = v5.1 para ser capaz de usar o Localhost% n e% parâmetros h. Confira 'homem ssh_config' para mais informações sobre LocalCommand.

Para reverter automaticamente o título, de volta ao da hostname do localhost, depois de fechar a sessão SSH, você pode adicionar uma sequência de escape para você PS1 variável pronta em .bashrc:

export PS1='you_favorite_PS1_here'
if [ "$TERM" == 'screen' ]; then
    export PS1=${PS1}'\[\033k\h\033\\\]'
fi

Esses truques são especialmente úteis quando se usa uma configuração .screenrc que lhe mostra de que 'guia' tela que você está trabalhando atualmente. Adicionar algo como o seguinte para .screenrc para começar este trabalho:

caption always "%{= kY}%-w%{= Yk}%n %t%{-}%+w%{ kG} %-= @%H - %LD %d %LM - %c"

Tente a seguir comandos, não há necessidade de editar qualquer arquivo ou configuração como ~ / .bashrc, pode ser usado em tempo de execução.

Definir texto estático como título: (My Title)

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

Set variável local / global como título: ($ USER)

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

Set saída de comando como título: (hostname)

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

Definir como padrão (Revert para trás):

export PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
set_screen_title ()
{
    echo -ne "\ek$1\e\\"
}

Você também pode ligar tela e dizer-lhe para definir um título:

screen -X title "new title"

Se você estiver em uma janela de tela, ele irá definir o nome dessa janela. Se você não estiver na tela, ele irá definir o nome de janela aberta mais recentemente.

Para adicionar a resposta de Espo, as seqüências xterm de fuga também pode ser aplicada à variável Bash PS1

ESC]0;stringBEL -- Set icon name and window title to string
ESC]1;stringBEL -- Set icon name to string
ESC]2;stringBEL -- Set window title to string

Exemplo

PS1='\e]0;string\a'

Para ativar a atualização título automático quando pulando com ssh, adicione a ~/.bashrc:

ssh() {
  echo -n -e "\033k$1\033\\"
  /usr/bin/ssh "$@"
  echo -n -e "\033k`hostname -s`\033\\"
}
echo -n -e "\033k`hostname -s`\033\\"

Consulte http: //linuxepiphany.blogspot. com.ar/2010/05/good-screenrc-config-setup.html

 # add the following in your ~/.bashrc or ~/.bash_profile
 PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'

ou ainda melhor copiar todo o conceito para personalizar suas configurações festança entre um monte de hosts de aqui

A minha solução para este problema era criar um script e adicioná-lo ao meu arquivo ~ / .bashrc:

set-title() {
  ORIG==$PS1
  TITLE="\e];$@\a"
  PS1=${ORIG}${TITLE}
}

Agora, quando estou em qualquer sessão shell bash, eu digito "desired_title set-título" e ele muda para "título desejado". Isso funciona para várias versões do Ubuntu, atualmente no Kinetic 16.04

Eu tenho esta solução de aqui . Eu estava olhando para ele novamente, não poderia encontrá-lo e pensei que eu ia postar aqui para qualquer pessoa interessada.

Eu tenho esta solução de experiências com outros, como @ Flurin-Arner Comecei o @ Weston ganger set-título () . Eu também usei @ imgx64 PROMPT_DIRTRIM sugestão. Eu também estou usando @itseranga git prompt de ramo , embora isso não tem nada a ver com a questão ele mostra o que você pode fazer com o prompt.

Primeiro, como mostrado por Weston e acima

 TITLE="\[\e]2;$*\a\]"

pode ser usado para definir manualmente o Terminal título, "$ *" é a entrada de linha de comando, mas não o que nós queremos.

2 como indicado Eu também estou adicionando git branch à minha solicitação, novamente não faz parte da pergunta.

export PROMPT_DIRTRIM=3
parse_git_branch() {
       git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
     }

export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $ "

3, pela experiência que eu copiou o código título acima, defina a $ * a uma corda fixa e tentei isso:

see: \[\e]2;'SomeTitleString'\a\]

export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\]\[\e]2;'SomeTitleString'\a\] $ "

Isto teve o efeito desejado! Em última análise, eu queria que o caminho de base como o meu título. PS1 Parâmetros mostra que \ W é a base caminho para a minha solução é esta:

export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\]\[\e]2;\W\a\] $ "

sem o ramo git:

export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\[\033[00m\]\[\e]2;\W\a\] $ "

resultando em um tempo com git-ramo:

user@host ~/.../StudyJava (master) $  

resultando em um prompt sem parse_git_branch:

   user@host ~/.../StudyJava $  

onde pwd dá

/home/user/somedir1/otherdir2/StudyJava

e Terminal Título

StudyJava

NOTA: A partir @seff acima eu sou essencialmente substituindo o "Meu Título" com "\ W"

export PS1='\[\e]0;My Title\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top