私は、指定された開始ディレクトリの数によって決まる自己起動ディレクトリを持つ同じサイズの垂直ペイン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