Bash
在 xterm 標題欄中顯示命令
我的 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;否則標題欄不會在其中更改