Bash

在 xterm 標題欄中顯示命令

  • January 23, 2018

我的 Bash Prompt 目前正在使用以下順序設置 xterm 標題欄:

PS1='\033]0;\u@\h>\w\007'

有沒有一種簡單的方法可以在標題欄中顯示目前命令。例如,如果我正在使用 跟踪文件tail -f foo.log,我希望我的標題欄顯示tail -f foo.log.

基本上,您需要:

trap 'printf "\033]0;%s\007" "${BASH_COMMAND//[^[:print:]]/}"' DEBUG

在您.bashrc或類似的末尾。我花了一些時間來解決這個問題 - 請在此處查看我的答案以獲取更多資訊:)

(受此SU 答案的啟發)

您可以結合幾個 bash 技巧:

  • 如果您擷取 DEBUG 信號,則在執行每個命令之前呼叫處理程序
  • 該變數$BASH_COMMAND保存目前正在執行的命令

因此,擷取 DEBUG 並讓處理程序將標題設置為$BASH_COMMAND

trap 'printf "\033]0;%s\007" "${BASH_COMMAND//[^[:print:]]/}" >&2' DEBUG

這將保持標題更改,直到其他內容更改它,但只要您$PS1保持不變,它就不會成為問題 - 您啟動一個命令,DEBUG 處理程序更改標題欄,並且當命令完成時 bash 繪製一個新的提示並再次重置您的標題欄。

在這裡找到的一個有用提示(也是 SU 答案的來源)包括:

set -o functrace

這將使 bash 將 DEBUG 陷阱傳播到您啟動的任何子 shell;否則標題欄不會在其中更改

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