Come cambiare il titolo della scheda del terminale corrente usando solo la riga di comando

Nessuna delle risposte attualmente pubblicate funziona / risponde alla domanda.


Utilizzando solo un comando al prompt dei comandi, come posso cambiare il titolo della scheda del terminale corrente?

Molti post suggeriscono questo:

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

ma non fa nulla.

Nessuna delle risposte attuali funziona (alcune non rispondono alla domanda), quindi per chiarezza:

  • Una volta che il titolo è cambiato, non voglio che cambi se cambio directory ecc
  • Non voglio lo stesso titolo su tutte le tabs. Voglio solo impostare il titolo per la scheda in cui eseguo il comando
  • Voglio che più tabs abbiano titoli diversi

Inoltre, la variabile PROMPT_COMMAND non è impostata nelle sessioni del terminale. Se lo avessi impostato:

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

non ha alcun effetto.

Qual è il comando corretto?


Cordiali saluti, l’output di uname -a è:

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

da @Maythux, questo funziona per il mio bisogno di ignorare la mia directory corrente di prompt automatico sul terminale.

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

istruzione

Cambia la stringa in “Nuovo nome del terminale” con $("pwd") :

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

Questo cambierà automaticamente il titolo anche quando aggiungi una nuova scheda.


Io uso l’impostazione sotto che sembra migliore, puoi anche giocare a bash programming e impostarne uno tuo.

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

Aggiungi questa impostazione al tuo ~/.bashrc .

Quando PS1 imposta il titolo, qualsiasi tentativo di impostare il titolo utilizzando un comando o PROMPT_COMMAND fallirà, poiché il prompt viene stampato dopo tutti loro. Per questo motivo, preferisco mantenere un prompt semplice durante il test dei titoli ( PS1=$; unset PROMPT_COMMAND ).

Puoi farlo, sia in CLI che in GUI (suppongo tu stia usando gnome-terminal, puoi farlo per gli altri semplicemente sostituendo il nome dell’app):

In CLI, eseguire il comando:

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

Nota: il nuovo nome viene applicato a tutte le istanze delle tabs dei terminali e non all’unica scheda corrente.

inserisci la descrizione dell'immagine qui

O dalla GUI:

Vai a Menu: Terminale -> Imposta titolo -> Inserisci nuovo titolo, quindi salva.


Ora perché il tuo comando non funziona?

Dovresti aggiungere questa linea al file .bashrc e non direttamente al tuo terminale.

 gedit .bashrc 

Aggiungi questa riga:

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

Quindi salva e carica il file bashrc.

 source .bashrc 

È molto probabile che sia impostato PROMPT_COMMAND e sovrascriva la scelta del titolo ogni volta che viene visualizzato il prompt. Prova a distriggersrlo e quindi a impartire il comando titolo:

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

Istruzioni

  1. Aggiungi settitle () al tuo .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="\[\033]0;[email protected]\007\]";; *) local title='' esac local prompt=$(echo "$PS1" | sed -e 's/\\\[\\033\]0;.*\\007\\\]//') PS1="${title}${prompt}" } 

Da https://askubuntu.com/a/774543/455406 , una soluzione specifica per bash è quella di creare una funzione personalizzata (vedi ad esempio questo how-to ) come

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

che ti permette di chiamare set-title

Usando bash, wmctrl, xprop, ps

1) Per un programma attivo di lunga durata:

Ad esempio, avviare un programma (ranger) in esecuzione in un terminale, avviato dal desktop, modificare il titolo, una volta, dopo un certo ritardo (5 secondi) all’avvio del programma:

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 si sta eseguendo una sessione di terminale senza eseguire un programma attivo, aggiornare il titolo su un ciclo che termina quando il terminale si chiude:

 changetitleloop.sh 1 maintenance for server 

l’esecuzione di quanto sopra aggiornerà il titolo del terminale corrente ogni 1 secondo anche se si cd (può cambiarlo più volte), utilizzando:

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;" & 

Basato sulla risposta @muru

PS1 imposta il titolo, qualsiasi tentativo di impostare il titolo utilizzando un comando o PROMPT_COMMAND fallirà, poiché il prompt viene stampato dopo tutti loro

Questo ha funzionato nel mio SO elementare:

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

Lo eseguo in ogni nuova scheda:

scheda 1

scheda 2

E come mostra l’immagine precedente, ho diverse tabs con un nome univoco.

16.04.1-Ubuntu

Questa discussione potrebbe essere un po ‘vecchia, ma ecco una soluzione che funziona per me:

https://blog.programster.org/ubuntu-16-04-set-terminal-title

Basta modificare il file $ HOME / .bashrc e aggiungere la seguente funzione:
set-titolo () {
ORIG = $ PS1
Title = “\ e] 2; $ @ \ a”
PS1 = $ {} ORIG $ {title}
}

Ora quando vuoi impostare il titolo del tuo terminale, inserisci qualcosa come:
set-title “my awesome terminal title”