使用shell脚本的tmux拆分窗口

时间:2018-02-05 09:19:23

标签: shell tmux

我正在尝试编写用于在tmux中创建窗格的shell脚本。

#!/bin/sh
tmux rename-window user
tmux new-session -d
tmux split-window -h
tmux selectp -t 1
tmux split-window -h
tmux select-layout even-horizontal
tmux selectp -t 2
tmux split-window -v

但是当执行上面的代码时,并没有产生所需的输出。

图片显示执行代码时产生的输出:

Resulting output

相反,当所有命令都写入tmux时,它会产生所需的输出。

图片显示手动输入命令时产生的输出:

Desired output

如何修改代码以产生预期的结果?

3 个答案:

答案 0 :(得分:3)

试试这个,看起来它可以满足您的需求(通过“期望输出”图像判断):

tmux split-window -h
tmux split-window -h
tmux select-layout even-horizontal
tmux split-window -v
tmux select-pane -t 0

您还可以尝试使用https://github.com/tmux-plugins/tmux-resurrect等内容来保持布局。

答案 1 :(得分:0)

#!/bin/bash

ssh_list=( `cat $1` )
split_list=()
round=0
i=0
for ssh_entry in "${ssh_list[@]:1}"; do
        if (( $((round%2)) == 0 ))
        then
                split_list+=( split-window -v -t $((2*i)) -p 50 ssh "$ssh_entry" ';' )
        else
                split_list+=( split-window -h -t $((2*i)) -p 50 ssh "$ssh_entry" ';' )
        fi
        mxrd=$((2**round))
        i=$((i+1))
        if ((round==0)) || ((i>=mxrd))
        then
                i=0
                round=$((round+1))
        fi
done

tmux new-session ssh "${ssh_list[0]}" ';' \
    select-layout tiled ';' \
    "${split_list[@]}" \
    set-option -w synchronize-panes

答案 2 :(得分:0)

您可以在一次调用中执行所有 tmux 命令:

tmux new-session -d \; split-window -h \; split-window -h\; split-window -v