이것은 하나의 열로 여러 개의 행을 생성하는 것 같습니다. 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
변경되지 않는 제목이 지정됩니다.
이것은 MacOS에 너무 낯설지 않은 bash 스크립트이지만 직접 사용해 보아야 합니다.
#!/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" 명령을 "실행"합니다. 키로 사용하여 고유한 값을 검색 pane_id
하고 이를 bash 연관 배열에 저장합니다.pane_ids
pod_name
그런 다음 더미 창을 종료하고 select-layout even-vertical
. 마지막 for
루프는 pod_name 및 고유한 panel_id를 사용하여 각 창을 수평으로 분할하고 다른 명령을 "실행"합니다.