كيفية إنشاء جلسة 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.

على الرغم من أنني أجد أن إجابة Rampion كافية لاستخدام جلسة واحدة ، فإن هذا البرنامج النصي يتيح لك إعداد جلسات متعددة:

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 

تكييف اقتراح أليكس لتشمل التكوين القائم على المشروع عند بدء التشغيل ، بدأت في استخدام ما يلي:

# ~/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'

أضفت هذا إلى .login الخاص بي على الخادم الخاص بي.

السبب في أنني أفعل ذلك بهذه الطريقة هو أنني لا أرغب في إرفاق نفس الجلسة الفعلية ، أريد جلسة جديدة تستخدم نفس مجموعة Windows.

هذا يشبه أيضًا الجري screen -xRR.

لأولئك الذين يريدون فعل الشيء نفسه في fish:

tmux attach -t mysesh; or tmux new -s mysesh
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top