如何让我的终端顶栏显示正在运行的命令?

如何让我的终端顶栏显示正在运行的命令?

我经常并行运行需要很长时间才能完成的命令,有时我会忘记在哪里运行了什么,因为它们在屏幕上输出基本相同类型的信息。

你知道有什么方法可以找出哪个终端正在运行什么命令吗?

答案1

取自Bash - 通过运行第二个命令更新终端标题 · U&L并略有改变:

trap 'echo -ne "\033]2;$(history 1 | sed "s/^[0-9 ]* \+//")\007"' DEBUG

这(滥用)使用DEBUG信号作为触发器,通过以下方式使用历史记录中的最后一条条目(即,您执行的最后一条命令)来更新标题:XTerm 控制序列. 将此行添加到您的终端,~/.bashrc以便在每个新的终端窗口中启用该功能。

要在标题中打印其他命令输出,比如当前目录后跟pwd“:”和当前正在运行的命令,我建议使用printf如下方法:

trap 'echo -ne "\033]2;$(printf "%s: %s" "$(pwd)" "$(history 1 | sed "s/^[0-9 ]* \+//")")\007"' DEBUG

一些终端仿真器允许您指定动态标题,甚至为您提供命令名称作为选项,这样您甚至不需要摆弄 - 我搜索并在yakuake配置文件设置中找到了它。

答案2

可以通过改变变量的值来改变终端窗口的标题$PS1- 主要提示字符串。 [1] [2]。我们可以将此解决方案与使用history来自甜点的答案


方法一:自动更新的值$PS1(更新)

将以下行添加到文件底部~/.bashrc

# Change the terminal window title, based on the last executed command
rtitle() {
        # If the variable $PS1_bak is unset,
        # then store the original value of $PS1 in $PS1_bak and chang $PS1
        # else restore the value of $PS1 and unset @PS1_bak
        if [ -z "${PS1_bak}" ]; then
                PS1_bak=$PS1
                PS1+='\e]2;$(history 1 | sed "s/^[0-9 ]* \+//")\a'
        else
                PS1=$PS1_bak
                unset PS1_bak
        fi
};
export -f rtitle        # Export the function to be accessible in sub shells
#rtitle                 # Uncomment this line to change the default behaviour

然后source ~/.bashrc或者只需打开一个新终端并按以下方式使用该功能:

  • 执行rtitle以根据最后执行的命令自动开始更改终端窗口标题。
  • 再次执行rtitle即可返回默认行为。

方法二:手动更新的值$PS1(初始答案)

将以下行添加到文件底部~/.bashrc

set-title() {                                                                                 # Set a title of the current terminal window
        [[ -z ${@} ]] && TITLE="$(history 2 | head -1 | sed "s/^[0-9 ]* \+//")" || TITLE="$@" # If the title is not provided use the previous command
        [[ -z ${PS_ORIGINAL} ]] && PS_ORIGINAL="${PS1}" || PS_ORIGINAL="${PS_ORIGINAL}"       # Use the original value of PS1 for each future change
        PS1="${PS_ORIGINAL}"'\e]2;'"$TITLE"'\a'                                               # Change the prompt (the value of PS1)
}; export -f set-title

然后source ~/.bashrc或者只需打开一个新终端并按以下方式使用该功能:

  • set-title <something>将把终端窗口标题更改为<something>
  • set-title不带参数将会把终端窗口标题更改为前一个命令。

参考文献及例子:

相关内容