无法使用 TMUX 创建 2 列

无法使用 TMUX 创建 2 列

这似乎用一列创建了一堆行。我正在尝试创建 2 列,然后创建所需的所有行。

#!/usr/bin/env bash

(
  unset TMUX

  export session_uuid="$(uuidgen)"

  remove_tmux_session() {
    tmux kill-session -t "$session_uuid"
  }

  export -f remove_tmux_session

  trap remove_tmux_session TERM INT SIGINT SIGTERM

  echo "TMUX session id: $session_uuid"
  tmux new -d -s "$session_uuid"
  tmux set-option -g update-environment "remove_tmux_session session_uuid"

  # Run kubectl get pods and skip the header line
  kubectl get pods | tail -n +2 | while read -r line; do
      # Extract the first column (pod name)
      pod_name=$(echo "$line" | awk '{print $1}')

      # Run kubectl logs for each pod in a new tmux pane
      tmux split-window -v -t "$session_uuid" "kubectl logs '$pod_name' -f"
      tmux select-layout even-vertical

      # Create a new horizontal split for the second column
      tmux split-window -h -t "$session_uuid" "echo 'Second Column'"

      # Move to the next vertical pane in the new column
      tmux select-pane -t :.+

      # Create a new vertical split for the next row
      tmux split-window -v -t "$session_uuid" "echo 'Next Row'"

      # Move to the next horizontal pane in the new row
      tmux select-pane -t :.+

      # Repeat the process for additional rows/columns as needed
  done

  # Attach to the tmux session
  tmux attach-session -d -t "$session_uuid"
)

有人知道如何创建 2 列,然后将每个进程放入 2 列网格中的不同行中吗?

我使用的是 Macos,Tmux 版本3.3a

答案1

目前还不清楚您正在寻找什么布局,但这里有一个演示 bash 脚本,可以为您提供一些想法。一个问题是,这select-layout even-vertical将删除您开发的任何列结构,并放置全部窗格垂直。因此,这里的方法是首先创建行的垂直结构,均衡它们的间距,然后水平分割每个窗格。此图显示了结果。每个窗格中显示的文本只是您将在其中运行的实际命令的提示,并且它们aa bb cc只是一个简化的pod_name从你的代码。每个窗格的标题都带有pane_index始终变化的 和%pane_id不变的标题。

xterm tmux 布局

这是 bash 脚本,对于 MacOS 来说应该不会太陌生,但您必须自己尝试。

#!/bin/bash
session_uuid=mysession
DISPLAY=:0 xterm -title ttmux -geometry 60x30-1+1 \
  -e "tmux new-session -s $session_uuid  'sleep 20'" &
sleep 2
tmux set -g pane-border-status bottom
tmux set -g pane-border-format "#{pane_index} #{pane_id}"

declare -a names
for pod_name in aa bb cc
do      names+=($pod_name)
done

declare -A pane_ids
for pod_name in ${names[@]}
do      tmux split-window -v -t "$session_uuid" "echo kubectl logs '$pod_name';sleep 999"
        pane_ids[$pod_name]=$(tmux display -p '#{pane_id}')
done

tmux kill-pane -t "$session_uuid:0.0"
tmux select-layout even-vertical # removes columns!

for pod_name in ${names[@]}
do      pane_id=${pane_ids[$pod_name]}
        tmux split-window -h -t "$pane_id" "echo 'Second Column' $pod_name;sleep 999"
        tmux display-panes
done

该脚本首先创建一个新终端来使用虚拟命令运行 tmux,这样就可以轻松查看进度。在第一个for循环中,bash 数组names用于收集pod_name,如脚本中的循环所示。第二个for循环创建一个新的垂直窗格,并“运行”“kubectl”命令。它使用as 键检索唯一值pane_id并将其保存在 bash 关联数组中。pane_idspod_name

然后我们杀死虚拟窗格,并使用 均匀地展开窗格select-layout even-vertical。最后的for循环使用 pod_name 和唯一的 pane_id 水平分割每个窗格,并“运行”一些其他命令。

相关内容