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 레이아웃

이것은 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를 실행하기 위한 새 터미널을 생성하므로 진행 상황을 쉽게 볼 수 있습니다. 첫 번째 루프에서는 스크립트의 루프에 표시된 대로 forbash 배열이 names수집에 사용됩니다 . pod_name두 번째 for루프는 새로운 수직 창을 생성하고 "kubectl" 명령을 "실행"합니다. 키로 사용하여 고유한 값을 검색 pane_id하고 이를 bash 연관 배열에 저장합니다.pane_idspod_name

그런 다음 더미 창을 종료하고 select-layout even-vertical. 마지막 for루프는 pod_name 및 고유한 panel_id를 사용하여 각 창을 수평으로 분할하고 다른 명령을 "실행"합니다.

관련 정보