Cambia il titolo del terminale in Mac OS X


39

Come posso cambiare arbitrariamente il titolo di una finestra Terminale in Mac OS X? Ho visto questa domanda e questa cosa dell'involucro magico , ma penso che sia solo un semplice comando di Mac OS X.


Dovresti notare che non c'è nulla di specifico su OS X al riguardo: la risposta funzionerà praticamente su qualsiasi terminale.
— Andrew Aylett,

Quindi è specifico per Bash?
— Dan Rosenstark,

@Andrew Aylett, quindi lo script che ho inserito nella mia risposta (sotto) funzionerà anche sulle distribuzioni di Linux?
— Dan Rosenstark,

Sì, dovrebbe funzionare ovunque (con una shell derivata da sh) che utilizza terminali unix-y.
— Andrew Aylett,

Risposte:


48

Questo articolo spiega come.

In sostanza, usi le sequenze di caratteri che fanno eco allo schermo per informare il terminale di quale titolo dovrebbe essere visualizzato.

title='My first title'
echo -n -e "\033]0;$title\007"

Nell'esempio sopra, qualunque sia il titolo della variabile impostato mentre diventa il titolo del terminale. Certo, potresti semplicemente avere il titolo nella stringa da echeggiare come:

echo -n -e "\033]0;My first title\007"

Ma il primo modo lo rende leggermente più facile da usare e / o estendere in seguito.


Eccellente. Potresti includere uno script di esempio (come questo? echo -n -e "\033]0;$1\007") Nella tua risposta in modo che io possa contrassegnarlo come migliore risposta, per favore?
— Dan Rosenstark,

2
printf potrebbe essere più affidabile: printf "\033]0;%s\007" "$title_variable"(le varie opzioni e comportamenti dell'eco non sono gli stessi in tutti i sistemi, shell o anche opzioni di shell) Inoltre, le assegnazioni delle variabili in bash non dovrebbero avere spazi attorno al segno uguale.
— Chris Johnsen,

1
Ho usato $ * e all'interno di una funzione, quindi non avrei dovuto citare la mia stringa del titolo.
— BeepDog

C'è un modo per cambiare il titolo all'interno di un programma C? Il programma a cui sto pensando è in esecuzione un'animazione basata su ncurses.h, quindi non sono sicuro di come fare eco al terminale :-(
— phs,

OK: Funziona solo fprintf (stdout, ..). Avrei dovuto provare prima di chiedere.
— phs,

34

Aggiungendo quanto segue al tuo ~/.profileotterrai lo stesso effetto:

# function for setting terminal titles in OSX
function title {
  printf "\033]0;%s\007" "$1"
}

E poi una rapida title 'et voila'ordinerà tutte le schede.


perché è un problema se hai molte funzioni in .profile? c'è un limite?
— tgkprog,

1
IDK perché, ma
— ho

2
Oppure: alias title="printf '\033]0;%s\007'".
— Kenorb,

export alias title="printf '\033]0;%s\007'"
— Mwayi,

Puoi anche aggiungerlo usando sudo nano /etc/bashrc. Questo dovrebbe funzionare per tutti gli utenti. Riavviare la sessione terminale o fare source /etc/bashrcper applicare le modifiche.
— Eugene Kulabuhov,

8

Remix della risposta di Dan MgG:

echo -n -e "\033]0;$1\007"

Memorizzalo in un file chiamato / usr / bin / title (usando sudo!) E modificalo in + x. Quindi da qualsiasi luogo puoi semplicemente digitare

title 'Trying to Figure This GIT Thing Out'

e ottieni un bel titolo.

(La sintassi può variare se non sei su OSX, se ho capito bene)


Se utilizzi una di quelle versioni più recenti di OS X, puoi /usr/local/bin/titleinvece farlo .
— Samy Bencherif,

2

In alternativa alle soluzioni da riga di comando basate su sh, l'app Terminale OS X ha una preferenza per cambiare il titolo come segue: Sotto il menu Terminale-> shell c'è una scelta "modifica titolo", selezionala e puoi cambiare il titolo facilmente.


1

Su OS X, le preferenze del terminale sono memorizzate in ~/Library/Preferences/com.apple.Terminal.plist.

Il titolo del terminale è memorizzato nella WindowTitlepreferenza.


0

Grazie per questo. Ho appena aggiunto una funzione al mio .bashrc:

    function stit() {
    echo -n -e "\033]0;$1\007"
}

Nella mia mente "stit" = una scorciatoia conveniente per "set_title". E ora quando voglio impostare il titolo delle mie finestre al volo, scrivo:

stit "[new window title]"

0

La risposta contrassegnata come migliore risposta funziona bene ... questo è quello che ho fatto ...

tell application "Terminal"
    activate
    do script "echo -n -e \"\\033]0;WorkerTab1\\007\"; cd $HOME/folder1"
end tell

questo imposterà il nome della nuova scheda su WorkerTab1 e ​​quindi eseguirà altri comandi come "cd", ecc.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.