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

25

Nessuna delle risposte attualmente pubblicate funziona / risponde alla domanda.

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

Molti post suggeriscono questo:

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

ma non fa nulla.

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

  • Una volta modificato il titolo, non voglio che cambi se cambio directory ecc
  • Non voglio il titolo stesso su tutte le schede. Voglio solo impostare il titolo per la scheda. Eseguo il comando in
  • Voglio più schede con titoli diversi

Inoltre, la variabile PROMPT_COMMAND non è impostata nelle mie sessioni terminali. Se l'ho impostato:

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

non ha alcun effetto.

Qual è il comando corretto?

FYI, l'output di uname -a è:

% Bl0ck_qu0te%     
posta Bohemian 16.06.2015 - 04:48

9 risposte

14

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

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

Istruzioni

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

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

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

Uso le impostazioni di seguito che sembrano migliori, puoi anche giocare a bash programming e impostarne uno personalizzato.

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

Aggiungi questa impostazione a ~/.bashrc .

    
risposta data Kelly DC 22.08.2016 - 08:49
8

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

    
risposta data muru 22.06.2015 - 02:31
3

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 Esegui 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 schede dei terminali e non all'unica scheda corrente.

OdallaGUI:

VaiaMenu:Terminale->Impostatitolo->Inserisciilnuovotitoloquindisalva.

Oraperchéiltuocomandononfunziona?

Deviaggiungerequestarigaalfile.bashrcenondirettamentealtuoterminale.

gedit.bashrc

Aggiungiquestariga:

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

Quindi salva e carica il file bashrc.

source .bashrc
    
risposta data Maythux 16.06.2015 - 08:28
2

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

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

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="\[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}" }
    
risposta data earthmeLon 16.06.2015 - 05:42
2

Da link , una soluzione specifica per bash è 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 consente di chiamare set-title <name you want to set it to>

    
risposta data WillC 24.02.2017 - 01:31
1

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, cambiare 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 stai eseguendo una sessione di terminale senza eseguire un programma attivo, aggiorna il titolo su un ciclo che termina alla chiusura del tuo terminale:

changetitleloop.sh 1 maintenance for server

l'esecuzione di quanto sopra aggiornerà il titolo del terminale corrente ogni 1 secondo anche se tu cd (puoi cambiarlo più volte), 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;" &
    
risposta data Der Bosst 16.04.2018 - 17:17
1

Basato su @muru answer

% Bl0ck_qu0te%

Questo ha funzionato nel mio Elementary S.O:

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

Lo eseguo in ogni nuova scheda:

E come mostra l'immagine precedente, ho diverse schede con un nome univoco.

16.04.1-Ubuntu

    
risposta data JRichardsz 15.01.2018 - 15:32
1

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

link

% Bl0ck_qu0te%     
risposta data Sjoerd 17.05.2018 - 10:49

Leggi altre domande sui tag