Bash

在 Bash 中,為什麼將 PROMPT_COMMAND 設置為不可見的東西?

  • December 27, 2011

在 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通常)。我不明白為什麼回顯不可見的東西有任何用處。

\033Esc(Escape) 字元的八進制程式碼,這很好地暗示了您的回顯字元串PROMPT_COMMAND是終端控制序列。您的範例中的兩個序列看起來都將終端標題設置為user@host:pwd.

第一種情況,xterm*設置視窗名稱和圖示標題。詳細解釋請查看xterm 控制序列列表並向下滾動直到找到OSC P s;噸; 作業系統控制下的ST(OSC 是ESC ]和 ST 是ESC \)。

第二種情況是針對screen終端模擬器的,在螢幕控制序列列表中,它解釋了ESC _ 設置螢幕的hardstatus(簡單地說,就是螢幕視窗的標題)。

引用自:https://unix.stackexchange.com/questions/27692