Как создать новый сеанс TMUX, если никто не существует

StackOverflow https://stackoverflow.com/questions/3432536

  •  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] [-cstart-directory] [-Fformat] [-nwindow-name] [-ssession-name] [-tgroup-name] [-xwidth] [-yheight] [shell-command]

(псевдоним: new)

Создайте новую сессию с именем session-name.

[...]

То -A флаг делает new-session вести себя как attach-session если session-name уже существует; в этом случае, -D ведет себя как -d к attach-session.

new-session поддержал -A Так как TMUX-1.8.

Хотя я нахожу ответ 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top