Odpowiedzi:
Zależy od twojej powłoki.
W tym artykule przedstawiono wiele metod.
Ja osobiście używam zsh, który ma wygodną funkcję precmd (), która jest uruchamiana przed każdym monitem.
precmd () { print -Pn "\e]2;%n@%M | %~\a" } # title bar prompt
Chociaż w innych pytaniach wymieniono metody bash, aliasy cd. Bash zapewnia nieodłączną metodę, która oddziela tylko monity.
grzmotnąć
bash dostarcza zmienną PROMPT_COMMAND, która zawiera polecenie do wykonania przed pytaniem. Ten przykład (wstawiony do ~ / .bashrc) ustawia tytuł na „nazwa użytkownika @ nazwa hosta: katalog”:
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
gdzie \ 033 to kod znaku dla ESC, a \ 007 dla BEL. Zauważ, że cytowanie jest tutaj ważne: zmienne są rozwinięte w „...”, a nie rozwinięte w „...”. Zatem PROMPT_COMMAND jest ustawiony na nierozwiniętą wartość, ale zmienne wewnątrz „...” są rozwijane, gdy używany jest PROMPT_COMMAND.
PWD tworzy jednak pełną ścieżkę do katalogu. Jeśli chcemy użyć skrótu „~”, musimy osadzić ciąg znaków ucieczki w wierszu polecenia, co pozwala nam skorzystać z następujących rozszerzeń poleceń udostępnianych przez powłokę:
\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
W związku z tym poniższe polecenie generuje monit „bash $” i tytuł xterm „nazwa użytkownika @ nazwa hosta: katalog” ...
case $TERM in
xterm*)
PS1="\[\033]0;\u@\h: \w\007\]bash\$ "
;;
*)
PS1="bash\$ "
;;
esac
Zwróć uwagę na użycie [...], które każe bashowi zignorować niedrukowalne znaki kontrolne podczas obliczania szerokości pytania. W przeciwnym razie polecenia edycji linii są mylone podczas umieszczania kursora.
~/.profile
(lub równoważnym) pliku na zdalnym komputerze.
Skopiuj i wklej do pliku ~ / .profile:
PROMPT_COMMAND="echo -ne \"\033]0;${PWD##*/}\007\"; $PROMPT_COMMAND"
Spowoduje to ustawienie tytułu bieżącej karty terminala na nazwę folderu, w którym się znajdujesz (NIE całą ścieżkę).
Więc ...
Developer/Applications/Utilities/Bluetooth/
staje się =>Bluetooth
Począwszy od systemu Mac OS X Lion 10.7, Terminal ma jawną sekwencję ucieczki do ustawiania katalogu roboczego, który Terminal wyświetla za pomocą standardowej ikony „proxy” w oknie. Umożliwia to kliknięcie z wciśniętym klawiszem Command, aby zobaczyć ścieżkę, odsłonić w Finderze lub przeciągnąć jak jakikolwiek inny folder. Ponadto Terminal może to wykorzystać do utworzenia innego terminala w tym samym katalogu oraz do przywrócenia katalogu roboczego podczas zamykania / ponownego uruchamiania Terminalu (gdy włączone jest Wznowienie). Umożliwia także przywracanie katalogów dla grup okien.
Jest to ta sama sekwencja zmiany znaczenia komendy systemu operacyjnego, jak w przypadku tytułów okien i kart, ale z pierwszym parametrem ustawionym na 7. Wartość powinna być adresem URL „file:”, który umożliwia kodowanie procentowe znaków specjalnych, aby mógł obsługiwać wszystkie poprawne nazwy ścieżek. Powinieneś także dołączyć nazwę hosta, aby Terminal mógł ustalić, czy jest to katalog lokalny; Terminal uniknie używania go jako bieżącego katalogu roboczego, jeśli pochodzi z innego hosta.
W powiązanej notatce Terminal podobnie obsługuje ustawianie „reprezentowanego pliku” za pomocą sekwencji ucieczki OSC z parametrem 6. Jeśli jest ustawiony, ikona proxy wyświetli to zamiast katalogu roboczego. Na przykład mam emacsa i mniej skonfigurowane do odzwierciedlania aktualnie wyświetlanego pliku / bufora w ikonie proxy. Dzięki temu te programy oparte na tty mogą być bardziej zintegrowane z otaczającym systemem operacyjnym.
Zachowania katalogu roboczego są domyślnie włączone dla bash (domyślna powłoka w Mac OS X). Odpowiedni kod znajduje się w / etc / bashrc.
Warto również wspomnieć, że Lion Terminal obsługuje teraz ustawianie tytułu karty niezależnie od tytułu okna za pomocą sekwencji ucieczki OSC.
update_terminal_cwd
Funkcja będzie ustawiona ikonę proxy do bieżącego katalogu roboczego. Domyślnie $PROMPT_COMMAND
jest update_terminal_cwd
.
Oprócz zalecania używania sekwencji ucieczki poleceń systemu operacyjnego specyficznej dla terminala Apple: ESC ] Ps ; Pt BEL
gdzie Ps
jest 7
i Pt
jest file:
adresem URL; warto dodać, że w Mac OS X 10.11 (i prawdopodobnie od 10.7) jest plik /etc/bashrc_Apple_Terminal
(nieedytowalny pod 10.11), który definiuje wygodę update_terminal_cwd()
jako (bez komentarzy):
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"
}
Możesz użyć tego również na zdalnych skrzynkach, na wypadek, gdybyś chciał to zrobić, a następnie podrapać się po poprawnym zakodowaniu adresu URL pliku w bash.
A jeśli zmienisz PROMPT_COMMAND
się sam .bash_profile
lub .bashrc
zapomnisz to nazwać. W tym samym pliku pokazują przykład lepszego połączenia łańcuchowego za pomocą:
PROMPT_COMMAND="update_terminal_cwd${PROMPT_COMMAND:+; $PROMPT_COMMAND}"
Osobiście .bash_profile
chciałem dodać polecenie git, więc zrobiłem to:
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
Rozwiązania Bash obejmujące PS1 i PROMPT_COMMAND kończą się niepowodzeniem, jeśli katalog zawiera znaki Unicode (przynajmniej w systemie Snow Leopard). Najlepszym rozwiązaniem, jakie mogłem wymyślić, było zrobienie odpowiednika
PS1="\[\033]0;\`pwd | tr -dC '[\000-\177]'\`\007\]\$ "
Niestety nie działa to bezpośrednio, więc zamiast tego zdefiniowałem funkcję powłoki, aby wykonać tr
wywołanie:
termtitlefilter () { tr -dC '[\000-\177]'; }
PS1="\[\033]0;\`pwd | termtitlefilter\`\007\]\$ "
Działa to dobrze w przypadku akcentów łacińskich, które będą w formacie Unicode NFD (akcenty znikną, ale pozostanie podstawowa postać łacińska).
Niestety, całkowicie zawiedzie w przypadku takich rzeczy jak chiński.
Zakładając, że używasz domyślnego terminala MAC, możesz użyć następującego w .profile, ponieważ sam „set_prompt” może wysłać cię do folderu głównego po otwarciu nowej karty:
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
Wpisz to do swojego ~ / .profile lub równoważnego pliku:
function settitle() { echo -n "]0;$@"; }
function cd() { command cd "$@"; settitle `pwd -P`; }
export PS1='\W \$ '
settitle `pwd`
Pierwszy wiersz zawiera dwa znaki specjalne, których nie można skopiować / wkleić, ale tekst można pobrać stąd: http://blog.nottoobadsoftware.com/files/setterminaltitle.sh .
echo
używania printf
, co pozwala wyrazić te znaki (ESC i BEL / Control-G) za pomocą sekwencji ucieczki:printf '\e]0;$@\a"