Câu trả lời:
Phụ thuộc vào vỏ của bạn.
Bài viết này hiển thị nhiều phương pháp.
Cá nhân tôi sử dụng zsh có hàm premd () thuận tiện được chạy trước mỗi dấu nhắc.
precmd () { print -Pn "\e]2;%n@%M | %~\a" } # title bar prompt
Mặc dù các câu hỏi khác liệt kê các phương thức bash, chúng bí danh cd. Bash cung cấp một phương thức vốn có mà chỉ tắt dấu nhắc.
bash
bash cung cấp một biến PROMPT_COMMAND chứa lệnh để thực thi trước dấu nhắc. Ví dụ này (được chèn vào ~ / .bashrc) đặt tiêu đề thành "username @ hostname: thư mục":
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
trong đó \ 033 là mã ký tự cho ESC và \ 007 cho BEL. Lưu ý rằng trích dẫn rất quan trọng ở đây: các biến được mở rộng trong "..." và không được mở rộng trong '...'. Vì vậy, PROMPT_COMMAND được đặt thành một giá trị chưa được mở rộng, nhưng các biến bên trong "..." được mở rộng khi PROMPT_COMMAND được sử dụng.
Tuy nhiên, PWD tạo ra đường dẫn thư mục đầy đủ. Nếu chúng ta muốn sử dụng tốc ký '~', chúng ta cần nhúng chuỗi thoát trong lời nhắc, cho phép chúng ta tận dụng các mở rộng lời nhắc sau đây được cung cấp bởi trình bao:
\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
Do đó, phần sau đây tạo ra lời nhắc "bash $" và tiêu đề xterm của "username @ hostname: thư mục" ...
case $TERM in
xterm*)
PS1="\[\033]0;\u@\h: \w\007\]bash\$ "
;;
*)
PS1="bash\$ "
;;
esac
Lưu ý việc sử dụng [...], thông báo bash bỏ qua các ký tự điều khiển không in khi tính toán độ rộng của dấu nhắc. Nếu không, các lệnh chỉnh sửa dòng bị lẫn lộn trong khi đặt con trỏ.
~/.profile
tệp (hoặc tương đương) trên máy từ xa.
Sao chép và dán vào tệp ~ / .profile:
PROMPT_COMMAND="echo -ne \"\033]0;${PWD##*/}\007\"; $PROMPT_COMMAND"
Điều này sẽ đặt tiêu đề của tab thiết bị đầu cuối hiện tại thành tên của thư mục bạn đang ở (KHÔNG phải toàn bộ đường dẫn).
Vậy ...
Developer/Applications/Utilities/Bluetooth/
trở thành =>Bluetooth
Kể từ Mac OS X Lion 10.7, Terminal có trình tự thoát rõ ràng để đặt thư mục làm việc, mà Terminal hiển thị bằng biểu tượng "proxy" của cửa sổ tiêu chuẩn. Điều này cho phép bạn nhấn Command để xem đường dẫn, hiển thị trong Finder hoặc kéo nó như bất kỳ thư mục nào khác. Ngoài ra, Terminal có thể sử dụng điều này để tạo một thiết bị đầu cuối khác trong cùng thư mục và để khôi phục thư mục làm việc khi thoát / khởi động lại Terminal (khi Resume được bật). Nó cũng cho phép khôi phục các thư mục cho các nhóm cửa sổ.
Đó là trình tự thoát lệnh OSC) tương tự như đối với tiêu đề cửa sổ và tab, nhưng với tham số đầu tiên được đặt thành 7. Giá trị phải là URL "tệp:", cho phép các ký tự đặc biệt mã hóa phần trăm để nó có thể xử lý tất cả các tên đường dẫn hợp lệ. Bạn cũng nên bao gồm tên máy chủ để Terminal có thể xác định xem đó có phải là thư mục cục bộ hay không; Terminal sẽ tránh sử dụng nó làm thư mục làm việc hiện tại nếu nó từ một máy chủ khác.
Trên một lưu ý liên quan, Terminal tương tự hỗ trợ cài đặt "tệp được biểu diễn" bằng cách sử dụng chuỗi thoát OSC với tham số là 6. Nếu được đặt, biểu tượng proxy sẽ hiển thị thông báo này thay vì thư mục làm việc. Ví dụ: tôi có emacs và ít được cấu hình để phản ánh tệp / bộ đệm hiện đang hiển thị trong biểu tượng proxy. Điều này cho phép các chương trình dựa trên tty này được tích hợp nhiều hơn với HĐH xung quanh.
Các hành vi thư mục làm việc được bật theo mặc định cho bash (shell mặc định trên Mac OS X). Xem / etc / bashrc để biết mã liên quan.
Có lẽ cũng đáng đề cập rằng Lion Terminal hiện hỗ trợ thiết lập tiêu đề tab một cách độc lập với tiêu đề cửa sổ bằng cách sử dụng chuỗi thoát OSC.
update_terminal_cwd
chức năng sẽ đặt biểu tượng proxy để thư mục làm việc hiện hành. Theo mặc định $PROMPT_COMMAND
là update_terminal_cwd
.
Ngoài đề nghị bạn sử dụng cụ thể điều hành chỉ huy hệ thống thoát chuỗi của Apple Terminal: ESC ] Ps ; Pt BEL
nơi Ps
là 7
và Pt
là một file:
URL; thật đáng để thêm rằng trong Mac OS X 10.11 (và có lẽ kể từ 10.7) có một tệp /etc/bashrc_Apple_Terminal
(không thể chỉnh sửa theo 10.11), định nghĩa sự tiện lợi update_terminal_cwd()
là (không có nhận xét):
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"
}
Bạn cũng có thể sử dụng điều này trên các hộp từ xa của mình, trong trường hợp bạn nghĩ đến việc đó và sau đó gãi đầu về việc mã hóa chính xác URL tệp trong bash.
Và nếu bạn thay đổi PROMPT_COMMAND
trong chính bạn .bash_profile
hoặc .bashrc
bạn có thể quên gọi này. Trong cùng một tệp, họ cho thấy một ví dụ về việc xâu chuỗi nó tốt hơn một chút với:
PROMPT_COMMAND="update_terminal_cwd${PROMPT_COMMAND:+; $PROMPT_COMMAND}"
Cá nhân .bash_profile
tôi muốn thêm dấu nhắc git nên tôi đã làm điều này:
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
Các giải pháp Bash liên quan đến PS1 và PROMPT_COMMAND đều thất bại nếu thư mục có các ký tự Unicode trong đó (ít nhất là trên Snow Leopard). Giải pháp tốt nhất tôi có thể đưa ra là làm tương đương với
PS1="\[\033]0;\`pwd | tr -dC '[\000-\177]'\`\007\]\$ "
Thật không may, điều này không hoạt động trực tiếp, vì vậy thay vào đó tôi đã xác định một hàm shell để thực hiện tr
cuộc gọi:
termtitlefilter () { tr -dC '[\000-\177]'; }
PS1="\[\033]0;\`pwd | termtitlefilter\`\007\]\$ "
Điều này hoạt động tốt đối với các dấu Latin, sẽ có trong Unicode NFD (các dấu sẽ biến mất nhưng ký tự Latin bên dưới sẽ vẫn còn).
Thật không may, nó sẽ hoàn toàn thất bại cho những thứ như Trung Quốc.
Giả sử bạn đang sử dụng MAC Terminal mặc định, bạn có thể sử dụng cái sau trong .profile vì "set_prompt" có thể tự gửi bạn đến thư mục gốc khi bạn mở tab mới:
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
Nhập tệp này vào ~ / .profile hoặc tệp tương đương của bạn:
function settitle() { echo -n "]0;$@"; }
function cd() { command cd "$@"; settitle `pwd -P`; }
export PS1='\W \$ '
settitle `pwd`
Dòng đầu tiên chứa hai ký tự đặc biệt không thể sao chép / dán, nhưng bạn có thể tải xuống văn bản từ đây: http://blog.nottoobadsoftware.com/files/setterminaltitle.sh .
echo
dụng printf
, cho phép bạn thể hiện các ký tự đó (ESC và BEL / Control-G) với các chuỗi thoát:printf '\e]0;$@\a"