Как создать новую сессию tmux, если ее нет

Я пытаюсь выяснить, как подключиться к tmux session, если существует именованный сеанс tmux, если нет, я хочу создать новый с заданным именем.

В настоящее время я знаю несколько команд tmux, которые могут частично достичь того, что я ищу, но не совсем понятно, как их комбинировать. их вместе, чтобы получить то, что я ищу:

  • tmux attach подключается к автоматически существующему сеансу, но выдает ошибки, если сеанс не существует
  • tmux new создает новый сеанс - но это происходит каждый раз, поэтому я не могу оставить его в своем .tmux.conf
  • tmux has-session проверяет, существует ли сессия, но я не знаю, как сшить ее вместе с другими командами

Таким образом, я хотел бы создать скрипт tmux, чтобы это происходило автоматически, вместо того, чтобы создавать его вручную каждый раз, когда мне нужно войти в сеанс.

Как я могу написать автоматический скрипт, чтобы создать новый сеанс tmux (если данного имени сеанса не существует) или присоединить к имени сеанса (если он существует)?

119 голосов | спросил rampion 8 AM00000030000000331 2010, 03:58:03

7 ответов


0

Вы также можете добавить

new-session

на ваш .tmux.conf - это создаст сеанс по умолчанию при запуске сервера.

Тогда tmux attach либо подключится к текущему сеансу (то есть работает сервер), либо создаст новый сеанс (запустите сервер прочитайте файл конфигурации, введите команду new-session и присоедините к ней.

ответил Leonid Shevtsov 17 Jpm1000000pmMon, 17 Jan 2011 23:49:08 +030011 2011, 23:49:08
0

Я понял ( и указал для меня ).

tmux attach || tmux new
ответил rampion 8 AM00000050000001031 2010, 05:31:10
0

Как указано в комментариях от Петр Викторин , 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 if session-name уже существует; в этом случае -D ведет себя как -d attach-session .

new-session поддерживает -A начиная с tmux-1.8 .

ответил alpha_989 6 MarpmTue, 06 Mar 2018 18:52:57 +03002018-03-06T18:52:57+03:0006 2018, 18:52:57
0

Хотя я считаю, что ответа rampion достаточно для использования 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 Gaudio 29 PM00000060000005831 2011, 18:46:58
0

Адаптируя предложение Алекса включить конфигурацию на основе проекта при запуске, я начал использовать следующее:

# ~/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 для создания окон и панелей, а также для запуска моих редакторов.

ответил Anm 16 PM000000110000002531 2012, 23:12:25
0

Я использую псевдоним для создания нового сеанса, если необходимо, и присоединяюсь к сеансу по умолчанию, если он уже существует:

alias tmuxre='tmux new-session -t default || tmux new-session -s default'

Я добавил это в свой .login на моем сервере.

Причина, по которой я это делаю, заключается в том, что я не хочу присоединяться к тому же самому сеансу, я хочу новый сеанс, который использует ту же группу окон.

Это также похоже на выполнение screen -xRR.

ответил Michael 18 +04002011-10-18T00:45:34+04:00312011bEurope/MoscowTue, 18 Oct 2011 00:45:34 +0400 2011, 00:45:34
0

Для тех, кто хочет сделать то же самое в fish:

tmux attach -t mysesh; or tmux new -s mysesh
ответил tinyspark 7 Mayam18 2018, 03:21:39

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132