![如何在给定任意启动目录列表的情况下使用 N 个大小相等、垂直分割的窗格来启动 tmux?](https://linux22.com/image/229637/%E5%A6%82%E4%BD%95%E5%9C%A8%E7%BB%99%E5%AE%9A%E4%BB%BB%E6%84%8F%E5%90%AF%E5%8A%A8%E7%9B%AE%E5%BD%95%E5%88%97%E8%A1%A8%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E4%BD%BF%E7%94%A8%20N%20%E4%B8%AA%E5%A4%A7%E5%B0%8F%E7%9B%B8%E7%AD%89%E3%80%81%E5%9E%82%E7%9B%B4%E5%88%86%E5%89%B2%E7%9A%84%E7%AA%97%E6%A0%BC%E6%9D%A5%E5%90%AF%E5%8A%A8%20tmux%EF%BC%9F.png)
我想要一个 shell 脚本,该脚本将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
名为“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
.
我已使用tmux
版本2.7
、3.1c
和在 Red Hat Enterprise Linux 和 SUSE Linux Enterprise Server 发行版上对此进行了测试。3.2a
3.3
编辑 2024 年 3 月 2 日:找到了上述脚本的更复杂版本这里。此扩展脚本提供了一些附加选项,包括水平分割和平铺布局。
编辑2024年3月4日:此脚本假定您的tmux
配置以窗格编号 1 开始,而不是默认的 0。例如,在 my 中~/.tmux.conf
:
# Set the base-index to 1 rather than 0
set -g base-index 1
set-window-option -g pane-base-index 1