Как создать новую сессию tmux, если ее нет
Я пытаюсь выяснить, как подключиться к tmux session
, если существует именованный сеанс tmux, если нет, я хочу создать новый с заданным именем.
В настоящее время я знаю несколько команд tmux
, которые могут частично достичь того, что я ищу, но не ясно, как объединить их вместе, чтобы получить то, что я ищу:
tmux attach
подключается к автоматически существующему сеансу, но выдает ошибки, если сеанс не существует
tmux new
создает новый сеанс - но это происходит каждый раз, поэтому я не могу оставить его в моем .tmux.conf
tmux has-session
проверяет, существует ли сессия, но я не знаю, как сшить ее вместе с другими командами
Таким образом, я хотел бы создать скрипт tmux, чтобы это происходило автоматически, вместо того, чтобы создавать его вручную каждый раз, когда мне нужно войти в сеанс.
Как я могу написать автоматический сценарий, чтобы создать новый сеанс tmux (если данное имя сеанса не существует) или присоединиться к имени сеанса (если он существует)?
Ответы
Ответ 1
В качестве альтернативы вы можете добавить
new-session
на ваш .tmux.conf
-, который создаст сеанс по умолчанию при запуске сервера.
Затем tmux attach
будет либо прикрепляться к текущему сеансу (работающему серверу, то есть), либо создать новый сеанс (запустить сервер, прочитать файл конфигурации, выдать команду new-session
) и приложить к нему.
Ответ 2
Я понял это (и указал мне).
tmux attach || tmux new
Ответ 3
Как указано в комментариях Петра Опрос, 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
]
(alias: new
)
Создайте новый сеанс с именем session-name
.
[...]
The -A
flag makes new-session
behave like attach-session
if session-name
already exists; in this case, -D
behaves like -d
to attach-session
.
new-session
поддерживает -A
начиная с tmux-1.8.
Ответ 4
Несмотря на то, что для ответа на 1-й сеанс достаточно ответа на rampion, этот script позволяет настроить несколько сеансов:
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
Ответ 5
Адаптация предложения 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
- это моя серия запуска команд tmux для создания моих окон и панелей, а также запуск моих редакторов.
Ответ 6
Я использую псевдоним для создания нового сеанса, если это необходимо, и присоединяюсь к сеансу по умолчанию, если он уже существует:
alias tmuxre='tmux new-session -t default || tmux new-session -s default'
Я добавил это в свой .login на моем сервере.
Причина, по которой я это делаю, заключается в том, что я не хочу присоединяться к тому же самому сеансу, я хочу новый сеанс, который использует ту же группу окон.
Это также похоже на запуск screen -xRR
.
Ответ 7
Для тех, кто хочет сделать то же самое в fish
:
tmux attach -t mysesh; or tmux new -s mysesh