Jawaban:
Tergantung pada cangkang Anda.
Artikel ini menampilkan beberapa metode.
Saya pribadi menggunakan zsh yang memiliki fungsi precmd () yang nyaman yang dijalankan sebelum setiap prompt.
precmd () { print -Pn "\e]2;%n@%M | %~\a" } # title bar prompt
Meskipun pertanyaan lain mencantumkan metode bash, mereka alias cd. Bash menyediakan metode yang melekat yang hanya mematikan prompt.
pesta
bash memasok PROMPT_COMMAND variabel yang berisi perintah untuk dieksekusi sebelum prompt. Contoh ini (dimasukkan dalam ~ / .bashrc) menetapkan judul menjadi "nama pengguna @ hostname: direktori":
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
di mana \ 033 adalah kode karakter untuk ESC, dan \ 007 untuk BEL. Perhatikan bahwa kutipan itu penting di sini: variabel diperluas dalam "...", dan tidak diperluas dalam '...'. Jadi PROMPT_COMMAND diatur ke nilai yang tidak diperluas, tetapi variabel di dalam "..." diperluas ketika PROMPT_COMMAND digunakan.
Namun, PWD menghasilkan jalur direktori lengkap. Jika kita ingin menggunakan steno '~' kita perlu memasukkan string escape di prompt, yang memungkinkan kita untuk mengambil keuntungan dari ekspansi prompt berikut yang disediakan oleh 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
Jadi, yang berikut ini menghasilkan prompt "bash $", dan judul xterm dari "nama pengguna @ hostname: direktori" ...
case $TERM in
xterm*)
PS1="\[\033]0;\u@\h: \w\007\]bash\$ "
;;
*)
PS1="bash\$ "
;;
esac
Perhatikan penggunaan [...], yang memberitahu bash untuk mengabaikan karakter kontrol yang tidak mencetak saat menghitung lebar prompt. Kalau tidak, perintah pengeditan baris menjadi bingung saat menempatkan kursor.
~/.profile
file Anda (atau yang setara) di mesin jarak jauh.
Salin & tempel ke file ~ / .profile:
PROMPT_COMMAND="echo -ne \"\033]0;${PWD##*/}\007\"; $PROMPT_COMMAND"
Ini akan mengatur judul tab terminal saat ini dengan nama folder tempat Anda berada (BUKAN seluruh jalur).
Jadi ...
Developer/Applications/Utilities/Bluetooth/
menjadi =>Bluetooth
Pada Mac OS X Lion 10.7, Terminal memiliki urutan pelarian yang eksplisit untuk mengatur direktori kerja, yang ditampilkan Terminal menggunakan ikon "proxy" jendela standar. Ini memungkinkan Anda untuk Command-Klik untuk melihat jalan, mengungkapkan di Finder, atau seret seperti folder lainnya. Selain itu, Terminal dapat menggunakan ini untuk membuat terminal lain di direktori yang sama, dan untuk mengembalikan direktori kerja ketika berhenti / memulai ulang Terminal (ketika Resume diaktifkan). Ini juga memungkinkan memulihkan direktori untuk Grup Jendela.
Itu adalah urutan melarikan diri yang sama dengan Perintah Sistem Operasi (OSC) seperti untuk judul jendela dan tab, tetapi dengan parameter pertama yang diatur ke 7. Nilai harus berupa "file:" URL, yang memungkinkan persen-penyandian karakter khusus sehingga dapat menangani semua nama jalur yang valid. Anda juga harus memasukkan nama host sehingga Terminal dapat menentukan apakah itu direktori lokal; Terminal akan menghindari menggunakannya sebagai direktori kerja saat ini jika berasal dari host yang berbeda.
Pada catatan terkait, Terminal juga mendukung pengaturan "file yang diwakili" menggunakan urutan escape OSC dengan parameter 6. Jika diatur, ikon proksi akan menampilkan ini alih-alih direktori yang berfungsi. Sebagai contoh, saya memiliki emacs dan kurang dikonfigurasi untuk mencerminkan file / buffer yang sedang ditampilkan di ikon proxy. Ini memungkinkan program berbasis tty ini menjadi lebih terintegrasi dengan OS di sekitarnya.
Perilaku direktori kerja diaktifkan secara default untuk bash (shell default pada Mac OS X). Lihat / etc / bashrc untuk kode yang relevan.
Mungkin juga perlu disebutkan bahwa Lion Terminal sekarang mendukung pengaturan judul tab secara independen dari judul jendela menggunakan urutan escape OSC.
update_terminal_cwd
fungsi akan mengatur ikon proxy untuk direktori kerja saat ini. Secara default $PROMPT_COMMAND
adalah update_terminal_cwd
.
Selain merekomendasikan Anda menggunakan urutan melarikan diri Perintah Sistem Operasi spesifik Terminal Apple: di ESC ] Ps ; Pt BEL
mana Ps
ada 7
dan Pt
merupakan file:
URL; ada baiknya menambahkan bahwa di Mac OS X 10.11 (dan mungkin sejak 10.7) ada file /etc/bashrc_Apple_Terminal
(tidak dapat diedit di bawah 10.11) yang mendefinisikan kenyamanan update_terminal_cwd()
sebagai (tanpa komentar):
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"
}
Anda bisa menggunakan ini di kotak jauh Anda juga, kalau-kalau Anda berpikir untuk melakukannya dan kemudian menggaruk-garuk kepala Anda pada pengkodean URL file dengan benar di bash.
Dan jika Anda mengubahnya PROMPT_COMMAND
sendiri .bash_profile
atau .bashrc
Anda mungkin lupa menyebutnya. Dalam file yang sama mereka menunjukkan contoh merantai sedikit lebih baik dengan:
PROMPT_COMMAND="update_terminal_cwd${PROMPT_COMMAND:+; $PROMPT_COMMAND}"
Secara pribadi di saya, .bash_profile
saya ingin menambahkan prompt git jadi saya melakukan ini:
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
Solusi Bash yang melibatkan PS1 dan PROMPT_COMMAND keduanya gagal jika direktori memiliki karakter Unicode di dalamnya (setidaknya di Snow Leopard). Solusi terbaik yang dapat saya temukan adalah melakukan yang setara
PS1="\[\033]0;\`pwd | tr -dC '[\000-\177]'\`\007\]\$ "
Sayangnya ini tidak berfungsi secara langsung, jadi alih-alih saya mendefinisikan fungsi shell untuk melakukan tr
panggilan:
termtitlefilter () { tr -dC '[\000-\177]'; }
PS1="\[\033]0;\`pwd | termtitlefilter\`\007\]\$ "
Ini berfungsi baik untuk aksen Latin, yang akan berada di Unicode NFD (aksen akan menghilang tetapi karakter Latin yang mendasarinya akan tetap).
Sayangnya, itu akan benar-benar gagal untuk hal-hal seperti bahasa Cina.
Dengan asumsi Anda menggunakan Terminal MAC default, Anda dapat menggunakan yang berikut ini di. Profil karena "set_prompt" dengan sendirinya dapat mengirim Anda ke folder root ketika Anda membuka tab baru:
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
Masukkan ini ke file ~ / .profile atau yang setara:
function settitle() { echo -n "]0;$@"; }
function cd() { command cd "$@"; settitle `pwd -P`; }
export PS1='\W \$ '
settitle `pwd`
Baris pertama berisi dua karakter khusus yang tidak dapat disalin / ditempelkan, tetapi Anda dapat mengunduh teks dari sini: http://blog.nottoobadsoftware.com/files/setterminaltitle.sh .
echo
penggunaan printf
, yang memungkinkan Anda mengekspresikan karakter tersebut (ESC dan BEL / Control-G) dengan urutan pelarian:printf '\e]0;$@\a"