Tmux :Как создать «сеанс > окно > панель» и выполнить команду в панели?

Это не поддерживается, если вы используете Centos 7, потому что он не поддерживает флаг --userдля systemctl. См. этот отчет об ошибке Centos, Поддержка пользователей Systemd нарушена при доставке

1
30.06.2020, 14:43
2 ответа

Этот скрипт 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. Поэтому я использовал приемы, указанные в ответе по предыдущей ссылке (Николас Марриотт также дал решение для версии tmux старше 3.0a)

1
18.03.2021, 23:23

Более короткий способ сделать это. В этом примере создается 4 панели в сетке.

#!/bin/bash
sh="/usr/bin/env sh" # You can also choose zsh.
SESSION="misc"       # Session name.
WINDOW="experiments" # Window name.

tmux kill-session -t "$SESSION" 2>&1
tmux start \; new-session  -d -s "$SESSION" -n "$WINDOW" "$sh -c \"echo 'first shell'\"; $sh -i" \;
tmux split-window "$sh -c \"echo 'second shell'\"; $sh -i" \;
tmux split-window "$sh -c \"echo 'third shell'\"; $sh -i" \;
tmux split-window "$sh -c \"echo 'fourth shell'\"; $sh -i" \;
tmux select-layout tiled \;
tmux attach -t "$SESSION" \;
tmux switch -t "$SESSION"
1
18.03.2021, 23:23

Теги

Похожие вопросы