tmux run 清除屏幕并打印。如何将行为更改为下一行

tmux run 清除屏幕并打印。如何将行为更改为下一行

我试图在变量中捕获当前窗格。但是,tmux run "#{pane_id}"使用命令输出覆盖当前窗格,然后在按下某个键后将其清除。我的远程计算机将相同的命令输出打印到窗格的下一行。如何更改行为以便我的本地计算机打印到下一行?

我试图仅捕获变量中的命令输出,以便我可以根据窗格编号更改窗格切换行为。

命令之前的终端: 在此输入图像描述

命令后的终端:在此输入图像描述

按下某个键后,我会在命令之前返回到终端。

答案1

您不想执行窗格 id 本身,而是想执行输出窗格 id 的命令。

例如

$ var=$(tmux run "printf '%s' '#{pane_id}'")
$ echo "$var"
%2

答案2

我不是在讨论标题;我不是想修复你的tmux run …(比较XY问题)。我正在解决您的实际问题:

我试图仅捕获变量中的命令输出,以便我可以根据窗格编号更改窗格切换行为。

窗格中运行的进程应该已经TMUX_PANE在其环境中拥有。示例:echo "$TMUX_PANE"env | grep TMUX。这意味着窗格中的 shell 脚本可以$TMUX_PANE直接用作变量。不过,我不确定您是否想在窗格本身或其他地方获取 ID。

更通用的方法是:

tmux display-message -p '#{pane_id}'

您可以使用以下命令将其捕获到 shell 变量中:

var="$(tmux display-message -p '#{pane_id}')"

优点是:

  • 该命令在 tmux 外部的 shell 中工作(显然你不能使用$TMUX_PANE)。
  • 在 tmux 内部有效,但不在窗格中(例如prefix:display-message '#{pane_id}'Enter;默认prefixCtrl+ b)。这包括您可能希望通过击键 ( tmux bind-key …) 运行的代码(可能是 shell 代码)。
  • display-message接受-t,因此即使在窗格中,您也不限于窗格本身的 ID。例子:tmux display-message -p -t '{bottom}' '#{pane_id}'。看man 1 tmux 它描述的地方目标窗格

相关内容