나는 지정된 시작 디렉토리 수에 따라 결정되는 자체 시작 디렉토리가 있는 동일한 크기의 수직 분할 창 tmux
으로 시작 되는 쉘 스크립트를 원합니다 . 예를 들어,N
N
tmux-launch SESSION-NAME DIR1 DIR2 DIR3 ...
각 시작 디렉터리에 해당하는 초기 명령을 제공할 수 있으면 유용할 것입니다. 예를 들어,
tmux-launch SESSION-NAME DIR1:"CMD1" DIR2:"CMD2" DIR3:"CMD3" ...
답변1
여기에 제가 작성한 스크립트가 있습니다. 다른 이름으로 저장 tmux-launch.sh
( chmod +x tmux-launch.sh
):
#!/bin/bash
if [[ -z $2 ]]; then
current=$(tmux display -p "#S")
cat<<EOF
USAGE: $(basename $0) SESSION DIR [DIR] ...
[DIR] one or more startup directories; at least one is required
EOF
if [[ -n $current ]]; then
echo "current session: $current"
fi
exit 1
else
session="$1"
shift
fi
# start tmux
tmux new-session -s $session -d
args=( "$@" )
i=1
for e; do
# capture directory and optional command from $e
d=$(echo $e | cut -d: -f1)
c=$(echo $e | cut -d: -f2)
if [ ! -d $d ]; then
echo WARNING: directory does not exist, $d >&2
continue
fi
# Select pane $i, set dir to $d, run pwd
if [ $i -gt 1 ]; then
tmux split-window
fi
tmux select-pane -t $i
tmux send-keys "cd $d" C-m
if [ -n "$c" ]; then
# execute optional command
tmux send-keys "$c" C-m
fi
# equally-spaces
tmux select-layout even-vertical
i=$(expr $i + 1)
done
# Finished setup, attach to the tmux session!
tmux attach-session -t $session
예를 들어 다음 사용법은 tmux
각각 고유한 디렉터리에서 시작하는 5개의 창으로 구성된 "work"라는 세션을 시작하고 pwd
각 창과 첫 번째 창에서 명령을 실행합니다 echo tada
. 명령(물론 이 예에서는 디렉터리가 ~/scratch*
존재한다고 가정합니다) :
tmux-launch.sh work ~/scratch1:"pwd;echo tada" \
missing-directory:"echo do nothing" \
~/scratch2:pwd ~/scratch3:pwd ~/scratch4:pwd ~/scratch5:pwd
이 도구는 존재하지 않는 디렉터리를 건너뛰고 stderr
.
Red Hat Enterprise Linux 및 SUSE Linux Enterprise Server 배포판에서 tmux
이를 테스트 했습니다 2.7
.3.1c
3.2a
3.3
2024년 3월 2일 수정:위 스크립트의 더 복잡한 버전을 찾았습니다.여기. 이 확장 스크립트는 수평 분할 및 타일 레이아웃을 포함한 몇 가지 추가 옵션을 제공합니다.
2024년 3월 4일 수정:이 스크립트는 tmux
구성이 기본값 0이 아닌 창 번호 1로 시작한다고 가정합니다. 예를 들어 내 ~/.tmux.conf
:
# Set the base-index to 1 rather than 0
set -g base-index 1
set-window-option -g pane-base-index 1