Risposte:
Dipende dalla tua shell.
Questo articolo mostra più metodi.
Personalmente uso zsh che ha una comoda funzione precmd () che viene eseguita prima di ogni prompt.
precmd () { print -Pn "\e]2;%n@%M | %~\a" } # title bar prompt
Sebbene le altre domande elencino i metodi bash, alias cd. Bash fornisce un metodo intrinseco che concatena solo il prompt.
bash
bash fornisce una variabile PROMPT_COMMAND che contiene un comando da eseguire prima del prompt. Questo esempio (inserito in ~ / .bashrc) imposta il titolo su "nomeutente @ nome host: directory":
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
dove \ 033 è il codice carattere per ESC e \ 007 per BEL. Si noti che la citazione è importante qui: le variabili vengono espanse in "..." e non espanse in "...". Quindi PROMPT_COMMAND è impostato su un valore non espanso, ma le variabili all'interno di "..." vengono espanse quando si utilizza PROMPT_COMMAND.
Tuttavia, PWD produce il percorso completo della directory. Se vogliamo usare la scorciatoia '~', dobbiamo incorporare la stringa di escape nel prompt, che ci consente di sfruttare le seguenti espansioni di prompt fornite dalla shell:
\u expands to $USERNAME
\h expands to hostname up to first '.'
\w expands to directory, replacing $HOME with '~'
\[...\] embeds a sequence of non-printing characters
Pertanto, quanto segue produce un prompt di "bash $" e un titolo xterm di "nomeutente @ nomehost: directory" ...
case $TERM in
xterm*)
PS1="\[\033]0;\u@\h: \w\007\]bash\$ "
;;
*)
PS1="bash\$ "
;;
esac
Si noti l'uso di [...], che dice a bash di ignorare i caratteri di controllo non stampabili quando si calcola la larghezza del prompt. Altrimenti i comandi di modifica delle righe vengono confusi durante il posizionamento del cursore.
~/.profile
(o equivalente) sul computer remoto.
Copia e incolla nel file ~ / .profile:
PROMPT_COMMAND="echo -ne \"\033]0;${PWD##*/}\007\"; $PROMPT_COMMAND"
Ciò imposterà il titolo della scheda del terminale corrente sul nome della cartella in cui ci si trova (NON l'intero percorso).
Quindi ...
Developer/Applications/Utilities/Bluetooth/
diventa =>Bluetooth
A partire da Mac OS X Lion 10.7, Terminal ha una sequenza di escape esplicita per l'impostazione della directory di lavoro, che Terminal visualizza usando l'icona "proxy" della finestra standard. Ciò ti consente di fare clic tenendo premuto il tasto Comando per visualizzare il percorso, rivelarlo nel Finder o trascinarlo come qualsiasi altra cartella. Inoltre, il Terminale può utilizzarlo per creare un altro terminale nella stessa directory e per ripristinare la directory di lavoro quando si chiude / riavvia il Terminale (quando è abilitato Riprendi). Consente inoltre il ripristino delle directory per i gruppi di finestre.
È la stessa sequenza di escape OSC (Operating System Command) dei titoli di finestre e tabulazioni, ma con il primo parametro impostato su 7. Il valore dovrebbe essere un URL "file:", che abilita la codifica in percentuale di caratteri speciali in modo che possa gestire tutti i nomi di percorso validi. Dovresti anche includere il nome host in modo che Terminal possa determinare se si tratta di una directory locale; Il terminale eviterà di usarlo come directory di lavoro corrente se proviene da un host diverso.
Su una nota correlata, Terminal supporta allo stesso modo l'impostazione del "file rappresentato" usando la sequenza di escape OSC con un parametro di 6. Se impostato, l'icona del proxy mostrerà questo invece della directory di lavoro. Ad esempio, ho emacs e meno configurato per riflettere il file / buffer attualmente visualizzato nell'icona proxy. Ciò consente a questi programmi basati su tty di essere più integrati con il sistema operativo circostante.
I comportamenti della directory di lavoro sono abilitati per impostazione predefinita per bash (la shell predefinita su Mac OS X). Vedi / etc / bashrc per il codice pertinente.
Vale anche la pena ricordare che Lion Terminal ora supporta l'impostazione del titolo della scheda indipendentemente dal titolo della finestra usando la sequenza di escape OSC.
update_terminal_cwd
funzione imposterà l'icona proxy sulla directory di lavoro corrente. Di default $PROMPT_COMMAND
è update_terminal_cwd
.
Oltre a raccomandare di utilizzare la specifica Comando sistema operativo sequenza di escape di Apple Terminal: ESC ] Ps ; Pt BEL
dove Ps
è 7
ed Pt
è un file:
URL; vale la pena aggiungere che in Mac OS X 10.11 (e probabilmente dalla 10.7) c'è un file /etc/bashrc_Apple_Terminal
(non modificabile in 10.11) che definisce il comodo update_terminal_cwd()
come (senza i commenti):
update_terminal_cwd ()
{
local url_path='';
{
local i ch hexch LC_CTYPE=C LC_ALL=;
for ((i = 0; i < ${#PWD}; ++i))
do
ch="${PWD:i:1}";
if [[ "$ch" =~ [/._~A-Za-z0-9-] ]]; then
url_path+="$ch";
else
printf -v hexch "%02X" "'$ch";
url_path+="%${hexch: -2:2}";
fi;
done
};
printf '\e]7;%s\a' "file://$HOSTNAME$url_path"
}
Puoi usarlo anche sulle tue caselle remote, nel caso in cui stavi pensando di farlo e poi grattarti la testa per codificare correttamente l'URL del file in bash.
E se cambi da PROMPT_COMMAND
solo .bash_profile
o .bashrc
potresti dimenticare di chiamarlo. Nello stesso file mostrano un esempio di concatenamento un po 'meglio con:
PROMPT_COMMAND="update_terminal_cwd${PROMPT_COMMAND:+; $PROMPT_COMMAND}"
Personalmente nel mio .bash_profile
volevo aggiungere il prompt git quindi ho fatto questo:
local git_path=/Applications/Xcode.app/Contents/Developer/usr/share/git-core
for f in $git_path/git-completion.bash $git_path/git-prompt.sh
do
if [[ -f "$f" ]]; then
. "$f"
fi
done
get_sha() {
git rev-parse --short HEAD 2>/dev/null
}
if [ "function" = $(type -t __git_ps1) ]; then
export GIT_PS1_SHOWDIRTYSTATE=1
GIT_PS1_SHOWSTASHSTATE=1
GIT_PS1_SHOWUNTRACKEDFILES=1
GIT_PS1_SHOWCOLORHINTS=1
GIT_PS1_DESCRIBE_STYLE="branch"
GIT_PS1_SHOWUPSTREAM="auto git"
export PROMPT_COMMAND="$PROMPT_COMMAND${PROMPT_COMMAND:+; }"'__git_ps1 "\[\e[0;32m\]\u\[\e[1;32m\]@\h\[\e[0m\]:\[\e[0;34m\]\w\[\e[0m\]" "\$ " "\n{%s $(get_sha)}"'
fi
Le soluzioni di Bash che coinvolgono PS1 e PROMPT_COMMAND falliscono entrambe se la directory contiene caratteri Unicode (almeno su Snow Leopard). La migliore soluzione che potevo trovare era fare l'equivalente di
PS1="\[\033]0;\`pwd | tr -dC '[\000-\177]'\`\007\]\$ "
Purtroppo questo non funziona direttamente, quindi ho definito una funzione shell per fare la tr
chiamata:
termtitlefilter () { tr -dC '[\000-\177]'; }
PS1="\[\033]0;\`pwd | termtitlefilter\`\007\]\$ "
Questo funziona bene per gli accenti latini, che saranno in Unicode NFD (gli accenti scompariranno ma il carattere latino sottostante rimarrà).
Sfortunatamente, fallirà completamente per cose come il cinese.
Supponendo che si stia utilizzando il Terminale MAC predefinito, è possibile utilizzare quello seguente in .profile poiché "set_prompt" da solo potrebbe inviarti nella cartella principale quando si apre una nuova scheda:
set_prompt () {
BASE_PATH="${PWD##*/}"
echo -ne "\033]0;$BASE_PATH\007"
}
set_my_tab () {
update_terminal_cwd
set_prompt
}
PROMPT_COMMAND=set_my_tab
Inserisci questo nel tuo ~ / .profile o file equivalente:
function settitle() { echo -n "]0;$@"; }
function cd() { command cd "$@"; settitle `pwd -P`; }
export PS1='\W \$ '
settitle `pwd`
La prima riga contiene due caratteri speciali che non possono essere copiati / incollati, ma è possibile scaricare il testo da qui: http://blog.nottoobadsoftware.com/files/setterminaltitle.sh .
echo
use printf
, che ti permette di esprimere quei personaggi (ESC e BEL / Control-G) con sequenze di escape:printf '\e]0;$@\a"