Domanda

È possibile impostare il titolo della schermata utilizzando uno script di shell?

Ho pensato a qualcosa come inviare i comandi da tastiera Ctrl+UN spostare-UN Name accedere

Ho cercato per circa un'ora come emulare le sequenze di tasti in uno script di shell, ma non ho trovato la risposta.

È stato utile?

Soluzione

È possibile impostare il titolo dello schermo / xterm utilizzando le seguenti linee:

#!/bin/bash

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

[UPDATE] - su richiesta sto anche compresa la soluzione proposta da @Espo di seguito:

A seconda della versione xterm o la vostra distribuzione Linux la linea di cui sopra può o non può funzionare e si possono provare le xterm-defaults:

#!/bin/bash

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

Per ulteriori informazioni sui dettagli si veda: http: // www .faqs.org / docs / Linux-mini / Xterm-Title.html # s3 o fare riferimento alla risposta da @Espo qui sotto.

Altri suggerimenti

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

sequenze di escape xterm

I titoli delle finestre e delle icone possono essere modificati in un xterm in esecuzione usando XTerm sequenze di escape.Di seguito sono riportate le informazioni Le sequenze sono utili a questo proposito:

  • ESC]0;stringBEL -- Imposta il nome dell'icona e il titolo della finestra su una stringa
  • ESC]1;stringBEL -- Imposta il nome dell'icona su stringa
  • ESC]2;stringBEL -- Imposta il titolo della finestra su una stringa

Dove ESC è il carattere di fuga ( 033) e BEL è il carattere della campana ( 007).

La stampa di una di queste sequenze all'interno di XTERM causerà il cambiamento del titolo della finestra o dell'icona.

Nota:Queste sequenze si applicano alla maggior parte delle Derivati xterm, come NXTERM, color-xterm e rxvt.Altro terminale i tipi spesso usano escape diversi;vedere l'appendice per esempi.Per l' Elenco completo delle sequenze di escape di Xterm Vedere il file ctlseq2.txt, che viene fornito con la distribuzione xterm, o xterm.seq, che viene fornito con rxvt distribuzione.

Stampa delle sequenze di escape

Per informazioni costanti per tutta la durata di vita di questo guscio, come l'host e il nome utente, lo farà sufficiente per riecheggiare semplicemente la fuga stringa nel file rc della shell:

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

dovrebbe produrre un titolo come username@hostname, assumendo la shell Le variabili $USER e $HOST sono impostate correttamente.Le opzioni necessarie per echo può variare in base alla shell (vedere gli esempi di seguito).

Per informazioni che possono cambiare durante il la durata del guscio, come la corrente directory di lavoro, questi escape davvero bisogno di essere applicato ogni volta Il prompt cambia.In questo modo il string viene aggiornata con ogni comando emetti e di cui puoi tenere traccia informazioni quali l'attuale funzionamento directory, nome utente, nome host, ecc.Alcune shell forniscono funzioni speciali a questo scopo, alcuni non lo fanno e noi devono inserire le sequenze dei titoli direttamente nella stringa di prompt.Questo è illustrato nella sezione successiva.

Di seguito sono altri modi per lo script la ridenominazione dei titoli di schermo:

L'aggiunta le seguenti impostazioni per .ssh/config imposta il titolo dello schermo automaticamente dopo l'accesso al sistema tramite SSH:

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

Invece di %h, che rappresenta il nome host del computer si sta collegando con, è possibile utilizzare %n, che è l'attuale nome / alias utilizzato per connettersi alla macchina.

Nota: È necessario OpenSSH> = V5.1 per essere in grado di utilizzare localhost% n e% h parametri. Scopri 'uomo ssh_config' per più informazioni LocalCommand.

Per ripristinare automaticamente il titolo, torna a quella del nome host del localhost, dopo la chiusura della sessione SSH, è possibile aggiungere una sequenza di escape per voi pronta PS1 variabile .bashrc:

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

Questi trucchi sono particolarmente utili quando si utilizza una configurazione .screenrc che mostra in che cosa schermata 'scheda' si sta attualmente lavorando. Aggiungere qualcosa di simile alla seguente per .screenrc per ottenere questo lavoro:

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

Prova i comandi qui sotto, non c'è bisogno di modificare qualsiasi file o la configurazione come ~ / .bashrc, può essere utilizzato in fase di esecuzione.

testo statico Imposta come titolo: (Il mio titolo)

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

Imposta / variabile globale locale come titolo: ($ USER)

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

Imposta output del comando come titolo: (hostname)

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

Imposta di default (tornare):

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

È anche possibile chiamare schermo e dire che per impostare un titolo:

screen -X title "new title"

Se siete in una finestra a schermo, che verrà impostare il nome di quella finestra. Se non siete a schermo, sarà impostato il nome della finestra più di recente apertura.

Per aggiungere alla risposta di Espo, le sequenze di escape xterm possono essere applicati anche alla Bash PS1 variabile

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

Esempio

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

Per attivare l'aggiornamento automatico del titolo quando saltare con ssh, aggiungere questo al ~/.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\\"

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/~}"'

o meglio ancora copiare l'intero concetto per personalizzare i vostri file di configurazione di bash tra un sacco di host da qui

La mia soluzione a questo problema è stato quello di creare uno script bash e aggiungerlo al mio file ~ / .bashrc:

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

Ora, quando mi trovo in ogni sessione di shell bash, digito "set-titolo desired_title" e si passa a "titolo desiderato". Questo funziona per più versioni di Ubuntu, attualmente sul Kinetic 16.04

ho ottenuto questa soluzione da qui . Ero alla ricerca di nuovo, non riusciva a trovarlo e ho pensato di postare qui per chiunque sia interessato.

ho ottenuto questa soluzione da sperimentare con altri, come @ Flurin-Arner ho iniziato il @ Weston-ganger set-titolo () . Ho anche usato @ imgx64 PROMPT_DIRTRIM suggerimento. Sto anche utilizzando @itseranga git pronta ramo , anche se questo non ha nulla a che fare con la domanda mostrano che cosa si può fare con la richiesta.

Prima come dimostrato da Weston e sopra

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

può essere utilizzato per impostare manualmente il Terminal titolo, "$ *" è l'ingresso di comando, ma non quello che vogliamo.

2 ° quali indicati sto anche l'aggiunta di ramo git al mio sollecito, ancora una volta non fa parte della domanda.

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 °, per esperimento ho copiato il codice TITOLO, impostare il $ * a una stringa fissa e provato questo:

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

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

Questo ha avuto l'effetto desiderato! In ultima analisi, ho voluto il percorso di base come il mio titolo. PS1 Parametri mostra che \ W è la base percorso così la mia soluzione è questa:

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

, senza il ramo git:

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

con una conseguente richiesta con git-branch:

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

con una conseguente rapida senza parse_git_branch:

   user@host ~/.../StudyJava $  

dove pwd dà

/home/user/somedir1/otherdir2/StudyJava

e il Terminal Titolo

StudyJava

Nota: Da @seff sopra sto essenzialmente sostituendo il "My Title" con "\ W"

export PS1='\[\e]0;My Title\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top