bash – 如何在tmux窗格标题中显示当前命令
我想用当前执行命令更新tmux pane-title,如果没有命令,则更新当前
shell的名称.到目前为止我提出的是这个,在bashrc中:
case ${TERM} in screen*) PROMPT_COMMAND='printf " 33]2;bash 33"' set -o functrace trap 'echo -ne " 33]2;$BASH_COMMAND 33"' DEBUG ;; ... esac 方法来自这里: 这部分工作 – 它做了所需的但导致其他问题:新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;%s 33" "${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中没有与上面的内容一起工作.我不确定为什么选择了其他有效的方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |