我想用当前正在执行的命令更新 tmux 窗格标题,或者如果没有命令,则使用当前 shell 的名称。到目前为止我想出的是这个,在 bashrc 中:
case ${TERM} in
screen*)
PROMPT_COMMAND='printf "\033]2;bash\033\\"'
set -o functrace
trap 'echo -ne "\033]2;$BASH_COMMAND\033\\"' DEBUG
;;
...
esac
Run Code Online (Sandbox Code Playgroud)
该方法源自此处:http : //www.davidpashley.com/articles/xterm-titles-with-bash.html
这部分有效 - 它完成了所需但会导致其他问题:新 shell 中的第一个提示前缀为
"'"' DEBUG"
Run Code Online (Sandbox Code Playgroud)
以及所有剩余的命令
"
Run Code Online (Sandbox Code Playgroud)
它还可以防止在命令行上给出的某些命令失败,例如:
$ ps -h $$
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
Run Code Online (Sandbox Code Playgroud)
因此,虽然上述确实允许在 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 "\033]2;%s\033\\" "${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
Run Code Online (Sandbox Code Playgroud)
}
该函数update_title
打印更改 tmux 窗格标题的转义序列。它将窗格标题设置为默认值( 的值$TMUX_PANE_TITLE
)或作为参数给出的任何内容。
该函数title
是为了最终用户的方便:它更改$TMUX_PANE_TITLE
. 最终用户可以随时通过以下方式将标题更改为他们想要的任何位置:
$ title my new pane title
Run Code Online (Sandbox Code Playgroud)
初始标题设置为正在运行的 shell 的名称(即“bash”)。
Bash 在$PROMPT_COMMAND
显示提示之前执行任何操作。这被设置为update_title
在每个提示之前执行该函数以将提示设置为默认标题。
陷阱导致 Bash$BASH_COMMAND
在执行任何命令之前先执行。它被设置为update_title
在每个命令之前执行该函数以将提示设置为该命令的文本。
其他注意事项
在解决这个问题时,我发现set -o functrace
or set -T
(如问题中链接的人所述)导致 RVM 损坏。建议它的原因是允许在子shell 中更改提示,但缺少这个对我来说不是问题。
为了获得最初的标题,我想使用更简洁的,ps -ho comm $$
但这在 tmux 中似乎不起作用,上面的内容就位。我不知道为什么选择其他有效的方法。
归档时间: |
|
查看次数: |
8464 次 |
最近记录: |