Yanıtlar:
Kabuğuna bağlı.
Bu makalede birden çok yöntem gösterilmektedir.
Şahsen her istemden önce çalıştırılan uygun bir precmd () işlevine sahip olan zsh kullanıyorum.
precmd () { print -Pn "\e]2;%n@%M | %~\a" } # title bar prompt
Diğer sorular bash yöntemlerini listelemelerine rağmen, cd diğer adlarını kullanırlar. Bash, sadece bilgi istemi zincirleme yerel bir yöntem sağlar.
darbe
bash, komut isteminden önce çalıştırılacak bir komut içeren bir PROMPT_COMMAND değişkeni sağlar. Bu örnek (~ / .bashrc içine eklenmiş) başlığı "username @ hostname: directory" olarak ayarlar:
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
burada \ 033, ESC için karakter kodudur ve BEL için \ 007'dir. Burada alıntı yapmanın önemli olduğuna dikkat edin: değişkenler "..." ile genişletilir ve '...' ile genişletilmez. Böylece PROMPT_COMMAND genişletilmiş bir değere ayarlanır, ancak PROMPT_COMMAND kullanıldığında "..." içindeki değişkenler genişletilir.
Ancak, PWD tam dizin yolunu üretir. Eğer '~' kestirme yolunu kullanmak istiyorsak, kaçış dizisini kabuğun içine yerleştirmemiz gerekir; bu, kabuğun sağladığı aşağıdaki bilgi açılımlarından faydalanmamızı sağlar:
\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
Böylece, aşağıdaki "bash $" komut istemini ve "username @ hostname: directory" adlı bir xterm başlığı oluşturur ...
case $TERM in
xterm*)
PS1="\[\033]0;\u@\h: \w\007\]bash\$ "
;;
*)
PS1="bash\$ "
;;
esac
Bilgi isteminin genişliğini hesaplarken baskı yapmayan kontrol karakterlerini yoksaymasını bash söyleyen [...] kullanımına dikkat edin. Aksi halde imleci yerleştirirken satır düzenleme komutlarının kafası karışır.
~/.profile
uzak makinedeki (veya eşdeğeri) dosyaya koymak gerekir .
Dosyaya kopyala ve yapıştır ~ / .profile:
PROMPT_COMMAND="echo -ne \"\033]0;${PWD##*/}\007\"; $PROMPT_COMMAND"
Bu, geçerli terminal sekmesinin başlığını bulunduğunuz klasörün adına ayarlayacaktır (tüm yol değil).
Yani ...
Developer/Applications/Utilities/Bluetooth/
olur =>Bluetooth
Mac OS X Lion 10.7'den itibaren, Terminal'in standart pencere "proxy" simgesini kullanarak görüntülediği çalışma dizinini ayarlamak için açık bir kaçış dizisi vardır. Bu, yolu görmek, Finder'da göstermek veya başka bir klasör gibi sürüklemek için Komutla Tıklatmanıza olanak tanır. Ek olarak, Terminal bunu aynı dizinde başka bir terminal oluşturmak ve Terminal'den çıkarken / yeniden başlatırken (Devam et etkinken) çalışma dizinini geri yüklemek için bunu kullanabilir. Ayrıca Pencere Grupları için dizinlerin geri yüklenmesini sağlar.
Pencere ve sekme başlıkları ile aynı İşletim Sistemi Komutanlığı (OSC) çıkış sırası, ancak ilk parametre 7 olarak ayarlandı. Değer, yüzde kodlayan özel karakterleri işleyebilmesi için bir "dosya:" URL olmalıdır. tüm geçerli yol adları. Ana bilgisayar adını da eklemelisiniz, böylece Terminal yerel bir dizin olup olmadığını belirleyebilir; Terminal, farklı bir ana bilgisayardan geliyorsa, geçerli çalışma dizini olarak kullanmaktan kaçınacaktır.
İlgili bir notta, Terminal benzer şekilde OSC çıkış sırasını 6 parametresiyle kullanarak "temsil edilen dosyanın" ayarlanmasını desteklemektedir. Ayarlanırsa, proxy simgesi çalışma dizini yerine bunu gösterecektir. Örneğin, şu anda görüntülenen dosyayı / arabellek proxy simgesine yansıtacak şekilde daha az yapılandırılmış emac'larım var. Bu, bu tty tabanlı programların çevredeki işletim sistemi ile daha entegre olmasını sağlar.
Çalışma dizini davranışları bash için varsayılan olarak etkindir (Mac OS X'teki varsayılan kabuk). İlgili kod için bakınız / etc / bashrc.
Lion Terminal'in artık OSC kaçış dizisini kullanarak sekme başlığının pencere başlığından bağımsız olarak ayarlanmasını desteklediğini de belirtmekte fayda var.
update_terminal_cwd
Fonksiyon geçerli çalışma dizininin vekil simgesini ayarlayacaktır. Varsayılan $PROMPT_COMMAND
olarak update_terminal_cwd
.
Apple Terminaline özgü İşletim Sistemi Komutu kaçış sırasını kullanmanızı tavsiye etmekten başka : ESC ] Ps ; Pt BEL
nerede ve bir URL; Mac OS X 10.11’de (ve muhtemelen 10.7’den beri) , (yorum olmadan) uygun olarak tanımlayan bir dosya (10.11’in altında düzenlenemeyen ) olduğunu eklemeye değer :Ps
7
Pt
file:
/etc/bashrc_Apple_Terminal
update_terminal_cwd()
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"
}
Bunu yapmayı düşündüğünüzde ve daha sonra da kafanızı dosya URL'sini bash'te doğru bir şekilde kodlamak için çizdiğiniz takdirde, uzak kutularınızda da kullanabilirsiniz.
PROMPT_COMMAND
Kendi başınıza değiştirirseniz .bash_profile
veya .bashrc
bunu aramayı unutabilirsiniz. Aynı dosyada biraz daha iyi zincirleme örneği gösteriliyor:
PROMPT_COMMAND="update_terminal_cwd${PROMPT_COMMAND:+; $PROMPT_COMMAND}"
Şahsen .bash_profile
ben git istemi eklemek istedim, bu yüzden şunu yaptım:
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
PS1 ve PROMPT_COMMAND içeren Bash çözümlerinin her ikisi de, dizinde Unicode karakterleri varsa (en azından Snow Leopard'da) başarısız olur. Bulaşabileceğim en iyi çözüm, eşdeğerini yapmaktı.
PS1="\[\033]0;\`pwd | tr -dC '[\000-\177]'\`\007\]\$ "
Ne yazık ki bu doğrudan işe yaramıyor, bu yüzden tr
arama yapmak için bir kabuk işlevi tanımladım :
termtitlefilter () { tr -dC '[\000-\177]'; }
PS1="\[\033]0;\`pwd | termtitlefilter\`\007\]\$ "
Bu, Unicode NFD'de olacak olan Latin aksanları için iyi çalışır (aksanlar kaybolacak, ancak temeldeki Latin karakteri kalacaktır).
Ne yazık ki, Çin gibi şeyler için tamamen başarısız olacak.
Varsayılan MAC Terminalini kullandığınızı varsayarsak, .profile dosyasında aşağıdakileri kullanabilirsiniz, çünkü "set_prompt", yeni bir sekme açtığınızda sizi kök klasöre gönderebilir:
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
Bunu ~ / .profile veya eşdeğer dosyaya girin:
function settitle() { echo -n "]0;$@"; }
function cd() { command cd "$@"; settitle `pwd -P`; }
export PS1='\W \$ '
settitle `pwd`
İlk satır, kopyalanamayan / yapıştırılamayan iki özel karakter içeriyor, ancak metni buradan indirebilirsiniz: http://blog.nottoobadsoftware.com/files/setterminaltitle.sh .
echo
kullanımını printf
Eğer kaçış dizileri olanlarda karakterleri (ESC ve BEL / Kontrol-G) ifade olanak sağlayan:printf '\e]0;$@\a"