यदि कोई मौजूद नहीं है तो नया tmux सेशन कैसे बनाएं


144

मैं यह पता लगाने की कोशिश कर रहा हूं कि tmux sessionअगर एक नामित tmux सत्र मौजूद है, तो कैसे संलग्न करूं, यदि मैं दिए गए नाम के साथ एक नया बनाना नहीं चाहता।

वर्तमान में, मैं कुछ का पता है tmux आदेशों के जो आंशिक रूप से मैं जो चाह रहा हूं उसे प्राप्त कर सकता हूं, लेकिन यह स्पष्ट नहीं है कि जो मैं देख रहा हूं उसे पाने के लिए उन्हें एक साथ कैसे मिलाएं:

  • tmux attach स्वचालित रूप से मौजूदा सत्र के लिए संलग्न करता है - लेकिन यदि कोई सत्र मौजूद नहीं है, तो त्रुटियां
  • tmux new एक नया सत्र बनाता है - लेकिन यह हर बार ऐसा करता है, इसलिए मैं इसे अपने में नहीं छोड़ सकता .tmux.conf
  • tmux has-session एक सत्र मौजूद है या नहीं यह परीक्षण करता है - लेकिन मुझे नहीं पता कि इसे अन्य आदेशों के साथ कैसे जोड़ा जाए

इस प्रकार, मैं एक tmux स्क्रिप्ट बनाना चाहूंगा, ताकि यह स्वचालित रूप से हो जाए, बजाय इसे मैन्युअल रूप से बनाने के लिए कि मुझे सत्र में लॉग इन करने की आवश्यकता हो।

मैं एक नया स्क्रिप्ट कैसे बना सकता हूं ताकि एक नया tmux सेशन बनाया जा सके (यदि किसी दिए गए सत्र का नाम मौजूद नहीं है) या सत्र के नाम के साथ संलग्न करें (यदि यह मौजूद है)?


15
@kzh: मैं इसे एक प्रोग्रामिंग टूल प्रश्न के रूप में देख रहा हूं, जैसे कि vim
rampion

6
मैंने इस सवाल के लिए एक और संभव जवाब लिखा है, एक जिस्ट
chakrit

9
इस बीच, मेरा man tmuxकहना है: "-ए झंडा नया-सत्र बनाता है जैसे अटैच-सेशन अगर सत्र-नाम पहले से मौजूद है"
पेट्र विक्टोरिन

1
इसे स्थानांतरित करने वाले लोगों के लिए, मुझे यह ध्यान देना चाहिए कि मध्यस्थ भी 60 दिनों से अधिक पुराने प्रश्नों को दूसरी साइट पर नहीं भेज सकते हैं। इस प्रणाली की सीमा के कारणों को यहाँ समझाया गया है
ब्रैड लार्सन

1
@BradLarson, वर्तमान में, ऐसा करने का सबसे अच्छा / सरल विकल्प एक टिप्पणी में जवाब दिया गया है, नीचे: stackoverflow.com/questions/3432536/… । यहां आने वाले अधिकांश उपयोगकर्ता इसे ढूंढने में सक्षम नहीं होंगे। यह स्पष्ट रूप से एक बहुत महत्वपूर्ण प्रश्न है जैसा कि आप वोटों की संख्या से देख सकते हैं। क्या यह प्रश्न खोलना संभव है, इसलिए मैं इसे उत्तर के रूप में जोड़ सकता हूं, इसलिए नए लोग इसे खोज सकते हैं?
अल्फा_989

जवाबों:


89

वैकल्पिक रूप से, आप जोड़ सकते हैं

new-session

आपके .tmux.conf - जो सर्वर प्रारंभ पर एक डिफ़ॉल्ट सत्र बनाएगा।

फिर tmux attachया तो वर्तमान सत्र (चल रहे सर्वर, जो है) को संलग्न करेगा, या एक नया सत्र बनाएगा (सर्वर शुरू करें, कॉन्फ़िगरेशन फ़ाइल पढ़ें, new-sessionकमांड जारी करें ) और उसी को संलग्न करें।


3
जब यह एक नया सत्र बनाता है, तो डिफ़ॉल्ट पथ मेरे घर की निर्देशिका है, उस पथ से नहीं जिस से tmux को लागू किया गया था।
रिचर्ड हैनसेन

2
@AB: आप किस जवाब का मतलब है?
जुरगेन ए। इरहार्ड

क्या इसे बनाने का एक तरीका है @ रिचर्डहेनसेन का मसला? वर्तमान पथ से आह्वान सबसे अधिक समझ में आता है, और अगर new-sessionयह नष्ट हो जाता है तो यह एक वास्तविक मुद्दा लगता है।
ली ओलय्यवर

2
यह टूट जाता है tmux config मामले में पुन: लोड आप इसे (का उपयोग source-file ~/.tmux.conf)
सेबस्टियन Blask

11
यदि आप अपने सत्र का नाम -Aरखते हैं new-sessionतो @SastastianBlask विकल्प का उपयोग कर सकते हैं । new-session -A -s mysessionविन्यास पुनः लोड करने के साथ अच्छी तरह से खेलेंगे।
जौकेलकर

163

मैंने इसका पता लगाया ( और इसने मुझे बताया था )।

tmux attach || tmux new

28
इस उत्तर मेरे लिए बेहतर काम करता है क्योंकि मैं सत्र नाम कर सकते हैं: tmux attach-session -t my-session || tmux new-session -s my-session। एकमात्र समस्या यह नहीं है कि यह परमाणु है। tmux के पास वास्तव में एक Create-or-अनुलग्न कमांड होना चाहिए।
एंड्रयू

5
मेरे पास अगले उर्फ ​​को बैश में है -alias tm='tmux attach || tmux new'
अज़ात

10
Upvoting क्योंकि एक छोटे से ट्वीक के साथ यह नामित सत्रों के साथ काम करता है tmux attach -t some_name || tmux new -s some_name:। कुछ_नाम बदलकर $ 1 में एक शेबंग जोड़ें, और सहेजें।
शेजमिस्टर

10
Tmux से अपरिचित लोगों पर ध्यान दें और newबनाम के बारे में सोचें new-session: वे समानार्थक हैं, और इसलिए हैं attachऔर attach-session
एस्टीस

1
tmux new-session -ds default \; split-window -dv 2>/dev/null; tmux attach -t defaultबेहतर काम करता है और /bin/killपहले एक मामले में एक दूसरा tmux नहीं खोलता है । केवल नकारात्मक पक्ष यह है कि आपको इसके लिए सत्रों का नाम देना होगा।
टीनो

64

जैसा कि पेट्र विक्टोरिन , जोकोलेकर और पीजिंज़ की टिप्पणियों में बताया गया है , आप 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-Atmux-1.8 के बाद से समर्थन किया है


1
यदि आप इसे कुछ इस तरह से उपयोग करने जा रहे हैं, gnome-terminalजैसा कि कमांड मैं सुझाता हूं -sऔर विशिष्ट सत्र का नाम छोड़ देता हूं ताकि आप gnome-terminalएक ही सत्र से जुड़े हर नए सत्र के साथ समाप्त न हों । prefix + sनया टर्मिनल खोलने के बाद आप हमेशा मौजूदा सत्र का चयन कर सकते हैं ।
ड्रैगन

14

हालांकि मुझे लगता है कि 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 

13

स्टार्टअप पर प्रोजेक्ट आधारित कॉन्फ़िगरेशन को शामिल करने के लिए एलेक्स के सुझाव को अपनाना, मैंने निम्नलिखित का उपयोग करना शुरू किया:

# ~/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 कमांड की मेरी स्टार्टअप श्रृंखला है, साथ ही साथ मेरे संपादकों को भी शुरू करना है।


8

यदि आवश्यक हो तो मैं एक नया सत्र बनाने के लिए एक उपनाम का उपयोग करता हूं, और यदि यह पहले से मौजूद है तो अपने डिफ़ॉल्ट सत्र में संलग्न करें:

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

मैंने इसे अपने .login में अपने सर्वर पर जोड़ा।

मैं इसे इस तरह से करने का कारण यह है कि मैं एक ही वास्तविक सत्र में संलग्न नहीं करना चाहता, मैं एक नया सत्र चाहता हूं जो विंडोज़ के समान समूह का उपयोग करता है।

यह भी चलाने के समान है screen -xRR


2
यदि आप अक्सर अपने सत्र के अंदर और बाहर होते हैं, तो यह बहुत सारे अप्रयुक्त सत्रों को छोड़ देता है, जैसा कि देखा गया है tmux list-sessions
19

हाँ, ऐसा होता है, मैं उन्हें अभी-अभी साफ़ करता हूँ। यह एक छोटी सी खामी है जो मुझे चाहिए कार्यक्षमता प्राप्त करने के लिए।
माइकल

अरे @ mateusz-piotrowski - मैं एक कोड ब्लॉक में अपना कोड लपेटने के लिए संपादन से सहमत हूं लेकिन आप मेरे द्वारा कहे गए से भिन्न होने के लिए अन्य पाठ को क्यों संपादित करेंगे? यहाँ टिप्पणी करने के लिए क्षमा करें, लेकिन मैंने कहीं और नहीं देखा।
माइकल

मैं तुम्हें अपमान करने का मतलब नहीं था। मैंने सोचा था कि आप एक कॉन्फ़िगर फ़ाइल में एक उपनाम नहीं चला सकते हैं और इसलिए यह एक टाइपो होना चाहिए।
माटूस पिओत्रोस्की

3
अब तक, आप बस टाइप कर सकते हैं: tmux new -A -s defaultएक नया सत्र शुरू करने के लिए यदि यह मौजूद नहीं है या स्वचालित रूप से संलग्न है। मुझे लगता है कि यह कॉन्फिग फाइल को एडिट करने से बहुत बेहतर है।
pjincz

1

जो लोग में एक ही बात करना चाहते हैं के लिए fish:

tmux attach -t mysesh; or tmux new -s mysesh
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.