如何将 tmux 变量传递给状态栏的外部脚本

how to pass tmux varible to external script for the status bar

我正在使用默认的 <#{pane_current_path}> 显示当前使用的窗格的当前工作目录。然而,结果是一个冗长的完整目录路径,在状态栏中占据了很多 space。

我想要的是使用 shell 脚本或 ruby 脚本将其缩短并显示一个短路径,例如从主目录或最后两个子目录开始。

我一直在寻找一种方法让 shell 脚本将 #{pane_current_path} 作为变量,见下文:

set -g status-left "#[fg=blue][#S] #I:#P #(cm_tmux_status_pwd.rb #{pane_current_path})"

我测试了这个,显然它不起作用。

还有其他方法可以做到这一点,但它有问题,比如在外部脚本中设置 setenv 然后 showenv,见下文,它不能很好地同步。

tmux showenv -g TMUX_PWD_$(tmux display -p "#D" | tr -d %) | sed 's/^.*=//'

所以,请你建议我所期望的是否可行,无论如何操纵#{pane_current_path}?

与其将参数传递给脚本,不如从脚本本身获取您需要的内容?

你可以使用这个:

tmux display-message -p -F "#{pane_current_path}"

这将在脚本中或从 tmux 外部获取窗格当前路径。

如果您要对脚本使用 bash,这里是将窗格当前路径值分配给变量的方法(顺便说一句。双引号内的双引号是可以的):

local current_path="$(tmux display-message -p -F "#{pane_current_path}")"