加入環境變數 PROMPT_COMMAND 設定,例如
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}:${SSH_CONNECTION}\007"'
${USER}、${HOSTNAME}、......:系統環境變數,可使用 env 指令查看目前系統可用的環境變數。\033:Escape,開始 ANSI 脫逸序列(ANSI escape sequences)
\033]:OSC(Operating System Command),開始一個作業系統使用的控制字串
\033]0;:設定標題(title)
\007:結束命令,Xterm 可以使用BEL(0x07) 以及標準的ST(0x9C 或 0x1B 0x5C) 結束指令
沒意外的話,修改後,下一次登入,終端機的標題,就會依 PROMPT_COMMAND 設定的規則顯示。
原理:
Bash 顯示命令提示符號(PS1)之前,會執行環境變數 PROMPT_COMMAND 的內容。
如果沒成功,可能 PROMPT_COMMAND 執行完,又被後面執行的東西蓋過去了。
我在 Windows 10 Git Bash (Mintty) 設定 PROMPT_COMMAND,終端機的標題會變動後,又瞬間變回原樣。
原來 C:\Program Files\Git\etc\profile.d\git-prompt.sh 裡的命令提示符號 PS1 設定,也包含了標題設定 (PS1='\[\033]0;$TITLEPREFIX:$PWD\007\]' # set window title)。
... PS1='\[\033]0;$TITLEPREFIX:$PWD\007\]' # set window title PS1="$PS1"'\n' # new line PS1="$PS1"'\[\033[32m\]' # change to green ...
而 PROMPT_COMMAND 執行完,還會執行 PS1 的設定,所以才會又變回系統預設值。這種情況增加 PROMPT_COMMAND 環境變數無用,可直接寫進 PS1 裡面。
Bash 五個可以自訂的提示符號字串:
- PS0:在每個命令之後、任何輸出之前顯示。
- PS1:等待命令輸入的提示符號,大多數人會自訂提示符號。
- PS2:當命令需要更多輸入時(例如多行命令),會顯示輔助提示符號。
- PS3:用於互動式 select 選單。與其他提示符號不同,它不會展開脫逸序列。
- PS4:偵錯 bash 腳本時顯示,用於指示間接定址的層級。重複第一個字元表示更深的層級。
- 全域:C:\Program Files\Git\etc
- 個人:
C:\Users\%UserName%\
C:\Users\使用者帳號\
或在 Git Bash 執行 echo ~,會看到「/c/Users/使用者帳號」$ echo ~
- 如果在 C:\Users\使用者帳號\ 沒看到設定檔,可自己新增,我自己新增 .bashrc 後,系統就自己另外新增 .bash_profile
.bash_profile 內容,是檢查使用者目錄下有無 .profile、.bashrc,若有則執行# generated by Git for Windows test -f ~/.profile && . ~/.profile test -f ~/.bashrc && . ~/.bashrc
參考:
- https://askubuntu.com/questions/22413/how-to-change-gnome-terminal-title
command line - How to change Gnome-Terminal title? - Ask Ubuntu - https://tldp.org/HOWTO/Bash-Prompt-HOWTO/x264.html
PROMPT_COMMAND - https://wiki.archlinux.org/title/Bash/Prompt_customization
Bash/Prompt customization - ArchWiki - https://man.archlinux.org/man/bash.1#PROMPTING
bash(1) — Arch manual pages - https://www.gnu.org/software/bash/manual/html_node/Controlling-the-Prompt.html
Controlling the Prompt (Bash Reference Manual) - https://en.wikipedia.org/wiki/ANSI_escape_code
ANSI escape code - Wikipedia - https://xu3352.github.io/linux/2017/09/15/Linux-101-Hacks-Chapter-5-PS1,PS2,PS3,PS4-and-PROMPT_COMMAND
Linux 101 Hacks 第五章:PS1,PS2,PS3,PS4和提示命令 • xu3352's Tech Blog

沒有留言:
張貼留言