Terminal

Tmux:如何創建“會話 > 視窗 > 窗格”並在窗格中執行命令?

  • October 6, 2020

我想從 bash 腳本中執行下一個操作:

  • 創建一個名為“my_session”的會話。
  • 在該會話中創建一個名為“my_window”的視窗。
  • 在該視窗內創建兩個名為“my_pan1”和“my_pan2”的平底鍋。
  • 在“my_pan1”中發送命令。
  • 在“my_pan2”內發送命令。

你會如何處理這個問題?

這個 tmux.sh 腳本在我的 tmux 3.0a 上執行,並且在添加了這個之後:set -g pane-border-format "#{@mytitle}"在我的 .tmux.conf 中(請參閱下面的註釋中的原因)。您可能還必須set -g pane-border-status bottom在 .tmux.conf 中添加以下內容。使用以下命令,您將會話命名為“ses”,將視窗命名為“win”,將窗格 0 命名為“p1”,將窗格 1 命名為“p2”:

tmux.sh ses win p1 p2

#!/bin/bash
   
session=$1
window=$2
pan1=$3
pan2=$4
   
#Get width and lenght size of terminal, this is needed if one wants to resize a detached session/window/pane
#with resize-pane command here
set -- $(stty size) #$1=rows, $2=columns

#start a new session in dettached mode with resizable panes
tmux new-session -s $session -n $window -d -x "$2" -y "$(($1 - 1))"
tmux send-keys -t $session 'echo "first command in 1st pane"' C-m
   
#rename pane 0 with value of $pan1
tmux set -p @mytitle "$pan1"

#split window vertically
tmux split-window -h
tmux send-keys -t $session 'echo "first command in 2nd pane"' C-m
tmux set -p @mytitle "$pan2"

#At the end, attach to the customized session
tmux attach -t $session

我在重命名窗格時遇到了很多麻煩,因為tmux select-pane -t $window.0 -T $pan1應該可以工作,但如此處所述:https ://stackoverflow.com/questions/60106672/prevent-tmuxs-pane-title-from-being-updated窗格標題的一些更新可以是由 tmux 中的應用程序完成。所以我使用了上一個連結中答案中給出的技巧(Nicholas Marriott 還給出了 tmux 版本早於 3.0a 的解決方案)

引用自:https://unix.stackexchange.com/questions/595870