2014年11月28日 星期五

自訂 Linux 終端機的標題文字

要自訂 Linux 終端機的標題文字,可修改 .bashrc 檔案。
加入環境變數 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 腳本時顯示,用於指示間接定址的層級。重複第一個字元表示更深的層級。

Windows 10 Git Bash 設定檔位置(Git 2.53.0、Mintty):
  • 全域: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



參考:

沒有留言:

張貼留言