bash 脚本可以启动 tmux,将屏幕水平分割 5 次并在每次中运行 watch -n1 tail -n5 吗?

bash 脚本可以启动 tmux,将屏幕水平分割 5 次并在每次中运行 watch -n1 tail -n5 吗?

是否可以制作一个 bash 脚本来启动 tmux 并水平分割屏幕并watch -n1 tail -n5 file_n在每个脚本中运行?基本上,我多次启动一个脚本并将其进度写入我想要监视的不同文件中。如果我可以从一个脚本运行它而不是自己手动打开 10 个文件,那就太好了。顺便说一句,我从未使用过 tmux,这就是我问这个的原因。

答案1

尝试这个。它首先建立一个分离的 tmux 会话,然后使用 tail 命令打开窗口,然后设置窗口的布局,然后附加到会话。

for f in `seq 1 10`; do
if [[ $f -eq 1 ]]; then
        tmux new-session -d -s my_session_name "watch -n1 tail -n5 file_${f}"
    else
        tmux split-window -d -t my_session_name:0 -p20 -v "watch -n1 tail -n5 file_${f}";
    fi
done
tmux select-layout -t my_session_name:0 even-vertical
tmux attach-session -t my_session_name

如果您希望此运行有多个实例,则需要将所有出现的 更改my_session_name为每个会话唯一的内容。

另外,您的标题提到了 5 个窗口,但帖子正文提到了 10 个文件。代码按原样将在 10 个窗口中打开 10 个文件。更改seq 1 10您实际想要的窗口/文件的部分。

答案2

谢谢@Kusalananda 对于初始脚本。我添加了一些我需要的额外内容(例如基于 ssh ip 的自定义窗格标题):

#!/bin/bash

set -ex

key_path="your-key.pem"
ssh_user="user"
ssh_list=(1.2.2.2 3.3.3.2 5.5.5.6)

split_list=()
for ssh_entry in "${ssh_list[@]}"; do
    ssh-keygen -R $ssh_entry
    split_list+=( split-window ssh -i ${key_path} -o StrictHostKeyChecking=no ${ssh_user}@$ssh_entry ';' select-pane -T "-- $ssh_entry " ';')
done

tmux set -g pane-border-status top
tmux set -g pane-border-format "#{pane_index} #{pane_current_command} #{pane_title}"

tmux new-session "Multi-Session-Ssh" ';' \
    "${split_list[@]}" \
    select-layout tiled ';' \
    set-option -w synchronize-panes

相关内容