答案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;默认prefix为Ctrl+ b)。这包括您可能希望通过击键 (tmux bind-key …
) 运行的代码(可能是 shell 代码)。 display-message
接受-t
,因此即使在窗格中,您也不限于窗格本身的 ID。例子:tmux display-message -p -t '{bottom}' '#{pane_id}'
。看man 1 tmux
它描述的地方目标窗格。