Bash
在 Bash 中,為什麼將 PROMPT_COMMAND 設置為不可見的東西?
在 RHEL6 和 CentOS 6 上,在此處
/etc/bashrc
設置PROMPT_COMMAND
:case $TERM in xterm*) if [ -e /etc/sysconfig/bash-prompt-xterm ]; then PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm else PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\007"' fi ;; screen) if [ -e /etc/sysconfig/bash-prompt-screen ]; then PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen else PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\033\\"' fi
據我所知,所有這些選項都是無形列印的。這個有什麼用?
我知道這
PROMPT_COMMAND
是在顯示提示之前執行的(PS1
通常)。我不明白為什麼回顯不可見的東西有任何用處。
\033
是Esc
(Escape) 字元的八進制程式碼,這很好地暗示了您的回顯字元串PROMPT_COMMAND
是終端控制序列。您的範例中的兩個序列看起來都將終端標題設置為user@host:pwd
.第一種情況,
xterm*
設置視窗名稱和圖示標題。詳細解釋請查看xterm 控制序列列表並向下滾動直到找到OSC P s;噸; 作業系統控制下的ST(OSC 是ESC ]
和 ST 是ESC \
)。第二種情況是針對
screen
終端模擬器的,在螢幕控制序列列表中,它解釋了ESC _
設置螢幕的hardstatus(簡單地說,就是螢幕視窗的標題)。