मैं tmux शुरू करने के लिए अपना डिफ़ॉल्ट शेल कैसे सेट कर सकता हूं


जवाबों:


46

यह काम करने लगता है ...

https://wiki.archlinux.org/index.php/Tmux#Start_tmux_on_every_shell_login

बस अपने एलियन से पहले अपने .bashrc में bash कोड की निम्न पंक्ति जोड़ें; अन्य गोले के लिए कोड बहुत समान है:

[[ $TERM != "screen" ]] && exec tmux

2
मेरे लिए यह भी [[ $- != *i* ]] && returnएक अनंत लूप (एक ही पृष्ठ से) नहीं होना चाहिए
कीथ स्माइली

5
यह एक बुरा समाधान है क्योंकि TERMउपयोगकर्ता की .tmux.confफ़ाइल द्वारा कुछ अन्य मूल्य पर सेट किया जा सकता है । यह जाँचने के लिए बेहतर है कि TMUXचर सेट है या नहीं।
Kusalananda

104

@ स्टारनामर का उत्तर आम तौर पर सटीक होता है, हालांकि मैं आमतौर पर यह सुनिश्चित करने के लिए निम्न परीक्षण शामिल करता हूं कि (1) tmux सिस्टम पर मौजूद है, (2) हम एक इंटरैक्टिव शेल में हैं, और (3) tmux भीतर चलने की कोशिश नहीं करता है अपने आप:

if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
  exec tmux
fi

संदर्भ


1
अच्छा, मुझे पहले जरूरत है commandलेकिन एहसास नहीं हुआ कि यह अस्तित्व में है।
फ्रीडम_बेंन

2
यह execकथन आपको पूरे टर्मिनल को छोड़ने के बिना tmux से बाहर निकलने की अनुमति नहीं देता है! : |
लुइस मैडॉक्स

5
@LouisMaddox: execवर्तमान प्रक्रिया को एक नए के साथ बदल देता है - इस मामले में, यह bash लॉगिन शेल को tmux से बदल देता है, इसलिए जब tmux बाहर निकलता है तो वापस गिरने का कोई दूसरा टर्मिनल नहीं है :)
Mark Cowan

1
@rjt यह सही है, यह डिजाइन द्वारा एक नया सत्र शुरू करता है। यदि आप किसी मौजूदा tmux सेशन को संलग्न करना पसंद करते हैं, तो बस exec tmuxअपने पसंदीदा फ्लेवर की जगह लेंtmux attach
user7089

2
इसके बजाय exec tmuxमैं उपयोग करता हूं exec tmux new-session -A -s mainइसलिए मेरे पास हमेशा एक सत्र होगा जिसे मुख्य कहा जाता है और इसे संलग्न करें (हर बार जब मैं अपने रिमोट मशीन से कनेक्ट करता हूं तो एक नया बनाने के बजाय) लेकिन यह दुर्घटनाग्रस्त नहीं होगा जैसे tmux attachकि कोई सत्र उपलब्ध नहीं है (यहां पाया गया: unix.stackexchange.com/a/176885/256942 )
वेरना हॉनस्किमिड

16

जैसे कोई लाइन जोड़ना

[ -z "$TMUX"  ] && { tmux attach || exec tmux new-session && exit;}

अपने bashrc फ़ाइल में शायद काम करेंगे। ध्यान दें कि यह लाइन ssh से बाहर निकलेगी और एक बार जब आप tmux से बाहर निकलें या बाहर निकलें तो कनेक्शन समाप्त कर दें। मुझे यह कॉन्फ़िगरेशन पसंद है क्योंकि यह कनेक्शन को समाप्त करने के लिए महत्वपूर्ण स्ट्रोक बचाता है। लेकिन अगर आपको यह पसंद नहीं है (जो मुझे लगता है कि बहुत संभावना नहीं है) और समाप्ति के बाद लॉगिन शेल में रहेगा, बस exitभाग को हटा दें :

[ -z "$TMUX"  ] && { tmux attach || exec tmux new-session;}

यह भी ध्यान रखें कि आप के tmux attachसाथ लपेटना नहीं चाहिए exec, क्योंकि इससे कनेक्शन बंद होने का कारण होगा जब कोई tmux सत्र संलग्न करने के लिए नहीं है।


मैंने इस लाइन को अपने .bashrc में जोड़ दिया है, लेकिन अब जब मैं एक टर्मिनल शुरू करता हूं, तो मुझे कुछ संदेश मिलते हैं: /home/z/.tmux.conf:10: कोई वर्तमान सत्र नहीं (संदेश 11, 13, 14 लाइनों के लिए दोहराता है , 15)। वे पंक्तियाँ "सेट डिफॉल्ट-कमांड" एग्जिट बैश "और" सेट डिफाल्ट-टर्मिनल "स्क्रीन-256 कोलोर" जैसी चीजें हैं।
मैट जी

@MattG ऐसा लगता है कि यह tmux कॉन्फ़िगरेशन फ़ाइल में कुछ गड़बड़ है।
huangzonghao

5

कमांड है chshजो लॉगिन शेल को बदलता है। परामर्श करें man chsh


6
tmuxशेल नहीं है, यह GNU स्क्रीन जैसा टर्मिनल मल्टीप्लेक्स है । दिलचस्प है, यह मैन पेज के-c अनुसार विकल्प का समर्थन करता है , इसलिए यह आपके लॉगिन शेल के रूप में उपयोग करने के लिए केवल एक शेल की तरह काम कर सकता है, लेकिन मुझे संदेह है कि यह सभी स्थितियों में ठीक से काम नहीं करेगा, उदाहरण के लिए gdm / kdm के माध्यम से ग्राफिकल लॉगिन ।
मिकेल

1
यद्यपि यह समझदार है और प्रलेखन द्वारा समर्थित है, यह SSH (कुछ इस तरह ssh $some_server echo foo) के माध्यम से प्रत्यक्ष कमांड निष्पादन को तोड़ने के लिए लगता है ।
n.st

3
Ubuntu पर कम से कम 1.8 के रूप में tmux खुद को जोड़ता है /etc/shells, इसलिए यह एक मान्य लॉगिन शेल है।
क्लेट्रॉन

2
इसके लिए आपको default-shellवास्तविक शेल को इंगित करने के लिए tmux कॉन्फ़िगरेशन में सेटिंग को कॉन्फ़िगर करना होगा।
Kusalananda

4

मैं सफलतापूर्वक उपयोग कर रहा हूं

case $- in *i*)
    [ -z "$TMUX" ] && exec tmux
esac

मेरे में .zshrc। यदि आप बैश का उपयोग कर रहे हैं, तो इसे अपनी .bashrcजगह पर रखें।


मैंने सिर्फ tmuxअपने डिफ़ॉल्ट शेल ( chsh -s $(which tmux)) के रूप में सेटिंग की कोशिश की और यह SSH के माध्यम से प्रत्यक्ष कमांड निष्पादन को तोड़ने के लिए लगता है, उदाहरण के ssh $some_server echo fooलिए कोई आउटपुट नहीं देगा।


2

टर्मिनल वरीयताओं पर जाएं। यहाँ छवि विवरण दर्ज करें

और फिर "कमांड" बार पर क्लिक करें। यहाँ छवि विवरण दर्ज करें

"मेरे बेचने के बजाय एक कस्टम कमांड चलाएं" जांचें और जो भी कमांड आप अपने टर्मिनल के स्टार्टअप पर निष्पादित करना चाहते हैं उसे लिखें।


1

उपरोक्त किसी भी प्रतिक्रिया ने मेरे लिए काम नहीं किया - exec tmuxमुझे शेल को छोड़ने के बिना tmux को बंद करने से रोकता है (चाहे वह Ctrl+ Tया एप्लिकेशन मेनू से खोला गया हो )।

मैं लिनक्स मिंट, जो आप आदेशों के लिए कुछ हॉटकी नक्शा देता है, और का उपयोग करें (अन-कोषेर यह कुछ करने के लिए हो सकता है के रूप में ..) मैं आदेशों वहाँ शुरू करने, जैसे के साथ बैश के गोले मिल गया है Win+ Alt+ Bजटिल किसी प्रकार का होता है bash -exec(vim)करने के लिए बयान मेरे .bashrc को संपादित करें, इसलिए यह एक नियमित शेल की तरह काम करता है।

मेरे ऊपर सबसे ऊपर रखने के बाद उस स्थिति में vim के बजाय tmux लोड किया गया .bashrc। मैंने tmux को किसी अन्य स्टेटमेंट में लिपटाया है यदि स्टेटमेंट, जाँच रहा है कि यह इंटरेक्टिव मोड में चल रहा है।

if command -v tmux>/dev/null; then
        if [ ! -z "$PS1" ]; then # unless shell not loaded interactively, run tmux
                [[ ! $TERM =~ screen ]] && [ -z $TMUX ] && tmux
        fi
fi

आप एक पंक्ति में वह सब लपेट सकते हैं लेकिन पठनीयता के लिए मुझे लगता है कि यह ठीक है।


एम्परसेंड जोड़ने से उस मुद्दे का समाधान हो जाएगा। [[ ! $TERM =~ screen ]] && [ -z $TMUX ] && exec tmux &
डैनियल

1

@Louis Maddox के जवाब में जोड़कर, मैं tmux भाग को निष्पादित करूंगा;

(exec tmux attach || exec tmux new-session)

मैं उपयोग करता हूं exec sh -c 'tmux a || tmux', जो (आपके उत्तर को देखने के बाद) संभवत: खराब चीजें होंगी यदि tmux किसी भी कारण से शुरू नहीं हो सकता है ..... धन्यवाद, मैं अब से तुम्हारा उपयोग करूंगा :)
मार्क के कोवान

1
tmux new -A -s mysessionशायद काम भी करेगा।
पूलि

1

यह मेरे ~/.profile(मैं उपयोग कर रहा हूँ ksh93) में है:

if [[ -z "$TMUX" ]]; then
    if tmux has-session 2>/dev/null; then
        exec tmux attach
    else
        exec tmux
    fi
fi

यदि TMUXपर्यावरण चर अप्रभावित है / खाली है, तो हम पहले से ही tmux सत्र में नहीं हैं, इसलिए ...

यदि tmux has-sessionशून्य निकास स्थिति (सत्य) के साथ रिटर्न मिलता है, तो संलग्न करने के लिए एक उपलब्ध सत्र होता है। इसे संलग्न करें।

यदि नहीं, तो एक नया सत्र बनाएँ।

tmuxआपके लॉगिन शेल के रूप में भी इसका उपयोग करना संभव है । यदि आप ऐसा करते हैं, हालांकि, default-shellअपनी ~/.tmux.confफ़ाइल में एक वास्तविक शेल पर सेट करना सुनिश्चित करें (इस बारे में अधिक जानकारी के लिए tmux मैनुअल देखें)।


1

आप chshडिफ़ॉल्ट शेल के रूप में tmux सेट करने के लिए कमांड का उपयोग कर सकते हैं (और अब के रूप में शायद करना चाहिए) , तो निम्न जोड़ें .tmux.conf:

set-option -g default-shell /path/to/your/favourite/shell

बस लाइन के अंत में पथ को संशोधित करने के लिए याद रखें।


1

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

if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
  tmux a -t default || exec tmux new -s default && exit;
fi

इन उत्तरों के आधार पर:

https://unix.stackexchange.com/a/306165/198110

https://unix.stackexchange.com/a/113768/198110


0

इसे अपने में जोड़ें ~/.tmux.conf

set -g default-command /usr/local/bin/fish

1
मुझे लगता है कि आपने प्रश्न साथी को गलत समझा! ;)
फिल्प

-3

जैसा कि मिकेल ने पहले ही अपनी टिप्पणी में कहा है कि tmux है क्योंकि आपके लॉगिन शेल के दुष्प्रभाव हो सकते हैं। लेकिन आप tmuxअपने डिफ़ॉल्ट शेल को शाब्दिक रूप से बना सकते हैं । उपयोगकर्ता के डिफ़ॉल्ट शेल को / etc / passwd में परिभाषित किया गया है। तो आप रूट बन सकते हैं और / etc / passwd एडिट कर सकते हैं, उदाहरण के sudo vi /etc/passwdलिए उस लाइन को खोजें जो आपके उपयोगकर्ता नाम से शुरू होती है। यह शायद के साथ समाप्त होता है :/bin/bash। / बिन / बैश को / usr / bin / tmux में बदलें और अब tmux आपका डिफ़ॉल्ट लॉगिन शेल है।

हालाँकि, इस बात की कोई गारंटी नहीं है कि इससे समस्याएँ नहीं होंगी!

रूट के विशेषाधिकारों को पुनर्व्यवस्थित करने के लिए कुछ भी नहीं करना बेहतर हो सकता है । मैं अपने होम डायरेक्टॉय में एक फ़ाइल बनाने की कोशिश करूंगा जिसका नाम .bash_login है और उस फ़ाइल के भीतर से tmux शुरू करें: `इको" tmux "> ~ / .bash_login।

यह काम करना चाहिए, लेकिन आपको अपने आप को खोजने और खोजने की कोशिश करनी चाहिए, b / c द बैश डॉक्यूमेंटेशन इस बात के बारे में बहुत सटीक नहीं है कि कौन सी फाइल पढ़ी जाती है और कब निष्पादित की जाती है।


2
आपका पहला पैराग्राफ जो बताता है वह क्या chshकरता है! सिवाय इसके कि आपके रास्ते को मूल होने की आवश्यकता है और त्रुटि-प्रवण है। रनिंग tmuxसे .bash_loginहै अधिक दूरदराज के लॉगिन टूटने की संभावना।
गिल्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.