加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 如何在tmux窗格标题中显示当前命令

发布时间:2020-12-15 21:16:42 所属栏目:安全 来源:网络整理
导读:我想用当前执行命令更新tmux pane-title,如果没有命令,则更新当前 shell的名称.到目前为止我提出的是这个,在bashrc中: case ${TERM} in screen*) PROMPT_COMMAND='printf "33]2;bash33"' set -o functrace trap 'echo -ne "33]2;$BASH_COMMAND33
我想用当前执行命令更新tmux pane-title,如果没有命令,则更新当前 shell的名称.到目前为止我提出的是这个,在bashrc中:

case ${TERM} in

  screen*)       
    PROMPT_COMMAND='printf "33]2;bash33"'
    set -o functrace
    trap 'echo -ne "33]2;$BASH_COMMAND33"' DEBUG
    ;;

   ...

esac

方法来自这里:
http://www.davidpashley.com/articles/xterm-titles-with-bash.html

这部分工作 – 它做了所需的但导致其他问题:新shell中的第一个提示带有前缀

"'"' DEBUG"

以及所有剩余的命令

"

它还可以防止命令行上给出的某些命令失败,例如:

$ps -h $$
Warning: bad ps syntax,perhaps a bogus '-'? See http://procps.sf.net/faq.html

因此,虽然上面的命令允许当前命令显示在tmux窗格标题中,但它不起作用.有没有其他人得到更好的解决方案,或建议上面的问题是什么?

谢谢.

解决方法

以下是每次在BASH中执行命令时更新tmux窗格标题的一种方法.在?/ .bashrc中输入如下代码:

case ${TERM} in

    screen*)

        # user command to change default pane title on demand
        function title { TMUX_PANE_TITLE="$*"; }

        # function that performs the title update (invoked as PROMPT_COMMAND)
        function update_title { printf "33]2;%s33" "${1:-$TMUX_PANE_TITLE}"; }

        # default pane title is the name of the current process (i.e. 'bash')
        TMUX_PANE_TITLE=$(ps -o comm $$| tail -1)

        # Reset title to the default before displaying the command prompt
        PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'update_title'   

        # Update title before executing a command: set it to the command
        trap 'update_title "$BASH_COMMAND"' DEBUG

        ;;

        ... other cases for different terminals ...

esac

}

函数update_title打印更改tmux窗格标题的转义序列.它将窗格标题设置为默认值($TMUX_PANE_TITLE的值)或任何作为参数给出的值.

函数标题是为了方便最终用户:它更改了$TMUX_PANE_TITLE中默认标题的值.最终用户可以随时通过执行以下操作将标题更改为他们想要的标题:

$title my new pane title

初始标题设置为正在运行的shell的名称(即’bash’).

在显示提示之前,Bash会在$PROMPT_COMMAND中执行任何操作.设置此项以便在每次提示之前执行update_title函数以将提示设置为默认标题.

陷阱导致Bash在执行任何命令之前执行$BASH_COMMAND.它被设置为在每个命令之前执行update_title函数以将提示设置为该命令的文本.

其他说明

>在解决这个问题时,我发现set -o functrace或set -T(由问题中链接的人描述)会导致RVM中断.建议它的原因是允许改变子壳,但缺乏这个对我来说不是问题.>为了获得最初的标题,我想使用更简洁的ps -ho comm $$但是这似乎在tmux中没有与上面的内容一起工作.我不确定为什么选择了其他有效的方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读