Как создать новый сеанс tmux, если он не существует
Я пытаюсь выяснить, как прикрепиться к tmux session
Если именованный сеанс tmux существует, если нет, я хочу создать новый с заданным именем.
в настоящее время я знаю несколько tmux
команды, которые могут частично достичь того, что я ищу, но не ясно, как объединить их вместе, чтобы получить то, что я ищу:
-
tmux attach
присоединяется к автоматически существующему сеансу - но ошибки, если сеанс не существует -
tmux new
создает новый сеанс - но он делает это каждый раз, поэтому я не могу оставить его в своем.tmux.conf
-
tmux has-session
проверяет, существует ли в сессии - но я не знаю, как сшить его вместе с другими командами
таким образом, я хотел бы создать сценарий tmux, так что это происходит автоматически, вместо того, чтобы вручную создавать его каждый раз, когда мне нужно войти в сеансы.
как я могу написать автоматический скрипт, чтобы создать новый сеанс tmux (если задан имя сеанса не существует) или прикрепить к имени сеанса (если оно существует)?
7 ответов:
поочередно, вы можете добавить
new-session
на
.tmux.conf
- это создаст сеанс по умолчанию при запуске сервера.затем
tmux attach
либо присоединится к текущему сеансу (запущенный сервер, то есть), либо создаст новый сеанс (запустите сервер, прочитайте файл конфигурации, выполнитеnew-session
command) и прикрепить к этому.
я поняла (и если бы он указал мне).
tmux attach || tmux new
как указано в комментариях от Петр Викторин,jkoelker и pjincz, вы можете использовать следующую команду для присоединения к
mySession
если он существует, и создать его, если это не так:tmux new -A -s mySession
С
man tmux
:
new-session
[-AdDEP] [-c
start-directory
] [-F
format
] [-n
window-name
] [-s
session-name
] [-t
group-name
] [-x
width
] [-y
height
] [
shell-command
]
(синоним:
new
)создать новый сеанс с именем
session-name
.[...]
The
-A
флагnew-session
ведут себя какattach-session
еслиsession-name
уже существует; в этом случае-D
ведет себя как-d
доattach-session
.
хотя я нахожу ответ rampion достаточным для использования 1 сеанса, этот скрипт позволяет настроить несколько сеансов:
SESSIONS="work play" function has-session { tmux has-session -t 2>/dev/null } function except { if [ "$?" -eq 1 ] ; then fi } # Configure your sessions here function session-work { tmux new-session -d -s work tmux neww -k -t work:1 } function session-play { tmux new-session -d -s play tmux neww -k -t play:1 } # #MAIN for x in $SESSIONS do echo $x has-session $x except session-$x done
Примечание:
-k --> new-window will not be created if already exists -d --> start session or window, but don't attach to it yet -s --> name the session -t --> specify a target location in the form session:window.pane
адаптируя предложение Алекса о включении конфигурации на основе проекта при запуске, я начал использовать следующее:
# ~/bin/tmux-myproject shell script # The Project name is also used as a session name (usually shorter) PROJECT_NAME="myproject" PROJECT_DIR="~/myproject" tmux has-session -t $PROJECT_NAME 2>/dev/null if [ "$?" -eq 1 ] ; then echo "No Session found. Creating and configuring." pushd $PROJECT_DIR tmux new-session -d -s $PROJECT_NAME tmux source-file ~/bin/tmux-${PROJECT_NAME}.conf popd else echo "Session found. Connecting." fi tmux attach-session -t $PROJECT_NAME
здесь
tmux-myproject.conf
Это моя стартовая серия команд tmux для создания моих окон и панелей, а также запуска моих редакторов.
Я использую псевдоним, чтобы создать новый сеанс, если это необходимо, и прикрепить к моему сеансу по умолчанию, если он уже существует:
alias tmuxre='tmux new-session -t default || tmux new-session -s default'
я добавил Это к моему .войти на мой сервер.
причина, по которой я делаю это таким образом, заключается в том, что я не хочу присоединяться к одному и тому же фактическому сеансу, я хочу новый сеанс, который использует ту же группу окон.
Это также похоже на запуск
screen -xRR
.