임의의 시작 디렉토리 목록이 주어지면 동일한 크기의 수직 분할 N 창으로 tmux를 시작하는 방법은 무엇입니까?

임의의 시작 디렉토리 목록이 주어지면 동일한 크기의 수직 분할 N 창으로 tmux를 시작하는 방법은 무엇입니까?

나는 지정된 시작 디렉토리 수에 따라 결정되는 자체 시작 디렉토리가 있는 동일한 크기의 수직 분할 창 tmux으로 시작 되는 쉘 스크립트를 원합니다 . 예를 들어,NN

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.1c3.2a3.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

관련 정보