Bash 스크립트에서 다음 단계를 수행하고 싶습니다.
- "my_session"이라는 세션을 만듭니다.
- 이 세션 내에 "my_window"라는 창을 만듭니다.
- 이 창 내에 "my_pan1" 및 "my_pan2"라는 두 개의 팬을 만듭니다.
- "my_pan1" 내에서 명령을 보냅니다.
- "my_pan2" 내에서 명령을 보냅니다.
이 문제를 어떻게 처리하시겠습니까?
답변1
이 tmux.sh 스크립트는 내 tmux 3.0a에서 실행되며 set -g pane-border-format "#{@mytitle}"
내 .tmux.conf에 다음을 추가합니다(scipt 아래 설명에서 이유를 확인하세요). .tmux.conf에 다음을 추가 해야 할 수도 있습니다 set -g pane-border-status bottom
. 다음 명령을 사용하여 세션 이름을 "ses"로 지정하고, 창 이름을 "win"으로 지정하고, Pane0 "p1" 및 Pan1 "p2"로 이름을 지정해야 할 수도 있습니다.
tmux.sh ses 승리 p1 p2
#!/bin/bash
session=$1
window=$2
pan1=$3
pan2=$4
#Get width and lenght size of terminal, this is needed if one wants to resize a detached session/window/pane
#with resize-pane command here
set -- $(stty size) #$1=rows, $2=columns
#start a new session in dettached mode with resizable panes
tmux new-session -s $session -n $window -d -x "$2" -y "$(($1 - 1))"
tmux send-keys -t $session 'echo "first command in 1st pane"' C-m
#rename pane 0 with value of $pan1
tmux set -p @mytitle "$pan1"
#split window vertically
tmux split-window -h
tmux send-keys -t $session 'echo "first command in 2nd pane"' C-m
tmux set -p @mytitle "$pan2"
#At the end, attach to the customized session
tmux attach -t $session
창 이름을 바꾸는 데 많은 문제가 있습니다. tmux select-pane -t $window.0 -T $pan1
작동해야 하지만 다음과 같습니다.https://stackoverflow.com/questions/60106672/prevent-tmuxs-pane-title-from-being-updated창 제목에 대한 일부 업데이트는 tmux 내의 애플리케이션에서 수행할 수 있습니다. 그래서 이전 링크의 답변에 제공된 트릭을 사용했습니다. (Nicholas Marriott는 3.0a 이전의 tmux 버전에 대한 솔루션도 제공했습니다.)
답변2
이를 수행하는 더 짧은 방법입니다. 이 예에서는 그리드에 4개의 창을 생성합니다.
#!/bin/bash
sh="/usr/bin/env sh" # You can also choose zsh.
SESSION="misc" # Session name.
WINDOW="experiments" # Window name.
tmux kill-session -t "$SESSION" 2>&1
tmux start \; new-session -d -s "$SESSION" -n "$WINDOW" "$sh -c \"echo 'first shell'\"; $sh -i" \;
tmux split-window "$sh -c \"echo 'second shell'\"; $sh -i" \;
tmux split-window "$sh -c \"echo 'third shell'\"; $sh -i" \;
tmux split-window "$sh -c \"echo 'fourth shell'\"; $sh -i" \;
tmux select-layout tiled \;
tmux attach -t "$SESSION" \;
tmux switch -t "$SESSION"