Как создать новый сеанс TMUX, если никто не существует
-
26-09-2019 - |
Вопрос
Я пытаюсь выяснить, как прикрепить к tmux session
Если именованная сессия TMUX существует, если нет, я хочу создать новый с указанным именем.
В настоящее время я знаю несколько tmux
Команды, которые могут частично добиться того, что я ищу, но не понятно, как объединить их, чтобы получить то, что я ищу:
tmux attach
Прикрепляется к автоматической существующей сессии - но ошибки, если не существует сеансаtmux new
создает новую сессию - но это так делает каждый раз, поэтому я не могу оставить его в моем.tmux.conf
tmux has-session
Испытает, существует ли сеанс - но я не знаю, как прошить его вместе с другими командами
Таким образом, я хотел бы создать сценарий TMUX, чтобы это произошло автоматически, вместо того, чтобы вручную создать его каждый раз, когда мне нужно войти в сеансы.
Как я могу написать автоматический скрипт, чтобы создать новый сеанс TMUX (если данное имя сеанса не существует) или присоединиться к имени сеанса (если он существует)?
Решение
Поочередно, вы можете добавить
new-session
на ваш .tmux.conf
- Это создаст сеанс по умолчанию на запуске сервера.
потом tmux attach
будет присоединиться к текущему сеансу (то есть запущенного сервера) или создать новый сеанс (запуск сервера, прочитайте файл конфигурации, выдать new-session
команда) и прикрепите к этому.
Другие советы
Я понял (и это указывало мне).
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
.[...]
То
-A
флаг делаетnew-session
вести себя какattach-session
еслиsession-name
уже существует; в этом случае,-D
ведет себя как-d
кattach-session
.
Хотя я нахожу ответ RAMPINE для использования 1 сеанса, этот сценарий позволяет настроить несколько сеансов:
SESSIONS="work play"
function has-session {
tmux has-session -t $1 2>/dev/null
}
function except
{
if [ "$?" -eq 1 ] ; then
$1
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
Адаптация предложения Alex, чтобы включить конфигурацию на основе проекта при запуске, я начал использовать следующее:
# ~/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
Является ли моя серия Startup из команд TMUX для создания моих окон и панелей, а также начать мои редакторы.
Я использую псевдоним для создания нового сеанса, если это необходимо, и присоединиться к моей сессии по умолчанию, если она уже существует:
alias tmuxre='tmux new-session -t default || tmux new-session -s default'
Я добавил это на мой .Login на моем сервере.
Причина, по которой я делаю это таким образом, потому что я не хочу прикрепить к той же фактической сессии, я хочу новую сессию, которая использует одну и ту же группу Windows.
Это также похоже на работу screen -xRR
.
Для тех, кто хочет сделать то же самое в fish
:
tmux attach -t mysesh; or tmux new -s mysesh