这似乎用一列创建了一堆行。我正在尝试创建 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
不变的标题。
这是 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_ids
pod_name
然后我们杀死虚拟窗格,并使用 均匀地展开窗格select-layout even-vertical
。最后的for
循环使用 pod_name 和唯一的 pane_id 水平分割每个窗格,并“运行”一些其他命令。