如何将我的 bash 窗口标题设置为最后运行的命令?

如何将我的 bash 窗口标题设置为最后运行的命令?

我希望我的终端窗口标题显示最后运行的命令。这对于在 Dev/Test/Prod 等中查找运行 Mongrel 的终端(用于测试 rails 应用程序)很方便。

我尝试了这个代码:

if [ "$SHELL" = '/bin/bash' ]
then
    case $TERM in
         rxvt|*term)
            set -o functrace
            trap 'echo -ne "\e]0;$BASH_COMMAND\007"' DEBUG
            #  export PS1="\e]0;$TERM\007$PS1"
         ;;
    esac
fi

至少,我认为这是我尝试过的代码。它确实有效,但它导致了一些奇怪的行为,比如当我将目录更改为符号链接时,窗口标题会卡在循环中,直到我按下 Ctrl C。

有什么可靠的方法可以将窗口标题设置为最后运行的命令?

答案1

您还可以使用该xtitle工具:

sudo apt-get install xtitle
lastcmd() { xtitle $(history 1 | cut -c8-); }
PROMPT_COMMAND=lastcmd

答案2

仅使用标准命令

lastcmd() { LASTCMD=$(history 1 | cut -c8-); echo -ne "\e]2;$LASTCMD\a\e]1;$LASTCMD\a"; }
PROMPT_COMMAND=lastcmd

测试一下

echo 'This echo command should be displayed on my window title'

时间戳

要显示最后一个命令的时间,请设置环境变量HISTTIMEFORMAT

HISTTIMEFORMAT=%c

man date参阅完整的日期/时间格式列表。

要禁用窗口标题上的时间戳前缀:

unset HISTTIMEFORMAT

持久性

把这两行放在你的~/.bashrc

相关内容