كيفية إنشاء جلسة 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
.
على الرغم من أنني أجد أن إجابة 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