আমি কীভাবে tmux শুরু করতে আমার ডিফল্ট শেল সেট করতে পারি


উত্তর:


46

এটি কাজ করে বলে মনে হচ্ছে ...

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

আপনার উপनावগুলির আগে কেবল আপনার .bashrc এ নিম্নলিখিত বাশ কোডের লাইনটি যুক্ত করুন; অন্যান্য শেলগুলির জন্য কোডটি খুব সমান:

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

2
আমার জন্য এটিও [[ $- != *i* ]] && returnঅসীম লুপ না হওয়ার প্রয়োজন (একই পৃষ্ঠা থেকে)
কীথ স্মাইল

5
এটি একটি খারাপ সমাধান যেহেতু TERMব্যবহারকারীর .tmux.confফাইল দ্বারা অন্য কোনও মান সেট করা যেতে পারে । TMUXভেরিয়েবল সেট করা আছে কি না তা যাচাই করা আরও ভাল ।
কুসালানন্দ

104

@ স্টারনামারের উত্তরটি সাধারণত সঠিক, যদিও আমি সাধারণত (1) টিএমউক্সটি সিস্টেমে রয়েছে তা নিশ্চিত করার জন্য নিম্নলিখিত পরীক্ষাগুলি অন্তর্ভুক্ত করি, (২) আমরা একটি ইন্টারেক্টিভ শেলের মধ্যে রয়েছি, এবং (3) টিএমউক্সের মধ্যে চলার চেষ্টা করে না নিজেই:

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

তথ্যসূত্র


1
সুন্দর, আমার commandআগে প্রয়োজন ছিল কিন্তু বুঝতে পারিনি এটি বিদ্যমান।
Freedom_Ben

2
এই execবিবৃতিটি আপনাকে পুরো টার্মিনালটি ছাড়াই tmux ছাড়তে দেয় না! : |
লুই ম্যাডক্স

5
@ লুইসম্যাডক্স: execবর্তমান প্রক্রিয়াটিকে একটি নতুনের সাথে প্রতিস্থাপন করে - এই ক্ষেত্রে এটি ব্যাশ লগইন শেলটি টিএমউক্সের সাথে প্রতিস্থাপন করে, তাই যখন টিএমুক্স প্রস্থান করে তখন আর ফিরে যাওয়ার আর কোনও টার্মিনাল নেই :)
মার্ক কে কোয়ান

1
@rjt এটি সঠিক, এটি ডিজাইনের মাধ্যমে একটি নতুন অধিবেশন শুরু করবে। আপনি যদি কোনও বিদ্যমান exec tmuxtmux attach
টিএমউक्स

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;}

আপনার বাশার্ক ফাইলটিতে সম্ভবত কাজটি হবে। নোট করুন এই লাইনটি ssh থেকে প্রস্থান করবে এবং একবার আপনি tmux কে বিচ্ছিন্ন বা প্রস্থান করার পরে সংযোগটি শেষ করবে। সংযোগটি সমাপ্ত করার জন্য এটি কী স্ট্রোকগুলি সংরক্ষণ করে বলে আমি এই কনফিগারেশনটি পছন্দ করি। তবে আপনি যদি এটি পছন্দ না করেন (যা আমি মনে করি খুব সম্ভবত) এবং এটি সমাপ্তির পরে লগইন শেলের মধ্যে থেকে যায় তবে কেবল exitঅংশটি সরিয়ে ফেলুন :

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

এছাড়াও মনে রাখবেন যে আপনার tmux attachসাথে মোড়ানো উচিত নয় exec, কারণ এতে কোনও টিএমউक्स সেশন সংযুক্ত হওয়ার সময় সংযোগ বন্ধ হয়ে যেতে পারে।


আমি এই লাইনটি আমার .Bashrc- এ যুক্ত করেছি, তবে এখন আমি যখন টার্মিনালটি শুরু করি, আমি কিছু বার্তা পেয়েছি: /home/z/.tmux.conf:10: কোনও বর্তমান অধিবেশন নেই (বার্তা 11, 13, 14 লাইনগুলিতে পুনরাবৃত্তি করে) , 15)। এই লাইনগুলি হ'ল "সেট ডিফল্ট-কমান্ড" এক্সিকিউশন বাশ "" এবং "সেট ডিফল্ট-টার্মিনাল" স্ক্রিন-256 রঙ ""
ম্যাট জি

@ ম্যাটজি টিএমक्स কনফিগারেশন ফাইলটিতে কিছু ভুল বলে মনে হচ্ছে।
Huangzonghao

5

chshলগইন শেল পরিবর্তন করে এমন কমান্ড রয়েছে । পরামর্শ man chsh


6
tmuxশেল নয়, এটি জিএনইউ স্ক্রিনের মতো টার্মিনাল মাল্টিপ্লেক্সার । মজার বিষয় হচ্ছে -cএটি ম্যান পৃষ্ঠা অনুসারে বিকল্পটিকে সমর্থন করে , সুতরাং এটি আপনার লগইন শেল হিসাবে এটি ব্যবহার করার জন্য যথেষ্ট শেলের মতো কাজ করতে পারে তবে আমি সন্দেহ করি যে এটি সমস্ত পরিস্থিতিতে সঠিকভাবে কাজ করবে না, যেমন gdm / kdm এর মাধ্যমে গ্রাফিকাল লগইন ।
মাইকেল

1
যদিও এটি বোধগম্য এবং ডকুমেন্টেশনের দ্বারা সমর্থনযুক্ত, এটি এসএসএইচ (যেমন কিছু ssh $some_server echo foo) এর মাধ্যমে সরাসরি কমান্ড কার্যকর করতে পারে বলে মনে হচ্ছে ।
n.st

3
উবুন্টুতে কমপক্ষে 1.8 হিসাবে tmux নিজেকে যুক্ত করে /etc/shells, সুতরাং এটি একটি বৈধ লগইন শেল।
ক্র্যাশট্রন

2
এটি আপনাকে default-shellসত্য শেলকে নির্দেশ করতে tmux কনফিগারেশনে সেটিংসটি কনফিগার করতে হবে।
কুসালানন্দ

4

আমি সফলভাবে ব্যবহার করছি

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

আমার মধ্যে .zshrc। আপনি ব্যাশ ব্যবহার করেন, তাহলে এটি আপনার রাখা .bashrcপরিবর্তে।


আমি কেবলমাত্র tmuxআমার ডিফল্ট শেল ( chsh -s $(which tmux)) হিসাবে সেট করার চেষ্টা করেছি এবং এটি এসএসএইচ-এর মাধ্যমে সরাসরি কমান্ড প্রয়োগ কার্যকর করতে পারে বলে মনে হচ্ছে ssh $some_server echo fooকোনও আউটপুট উত্পাদন করবে না।


2

টার্মিনাল পছন্দগুলিতে যান। এখানে চিত্র বর্ণনা লিখুন

এবং তারপরে "কমান্ড" বারে ক্লিক করুন। এখানে চিত্র বর্ণনা লিখুন

"আমার বিক্রয়ের পরিবর্তে একটি কাস্টম কমান্ড চালান" পরীক্ষা করে দেখুন এবং আপনার টার্মিনালটির শুরুতে আপনি যে আদেশটি চালাতে চান তা লিখুন।


1

উপরের প্রতিক্রিয়াগুলির কোনও আমার পক্ষে কাজ করে নি - exec tmuxশেলটি ছাড়াই আমাকে টিএমক্স বন্ধ করতে বাধা দেয় (এটি Ctrl++ Tঅথবা অ্যাপ্লিকেশন মেনু থেকে খোলা হোক )।

আমি লিনাক্স মিন্ট ব্যবহার করি, যা আপনাকে কিছু হটকিগুলি কমান্ডে ম্যাপ করতে দেয় এবং (কিছু-কারও কাছে আন-কোশার হতে পারে ..) কমান্ডগুলি সহ আমি এখানে বাশ শেল পেয়েছি, যেমন, Win+ Alt+ Bকিছু ধরণের bash -exec(vim)বিবরণী বিবৃতি দেয় আমার .bashrc সম্পাদনা করুন, তাই এটি নিয়মিত শেলের মতো কাজ করে।

আমার উপরের উপরেরটি উপরে রাখার পরে 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

@ লুইস ম্যাডক্সের উত্তরে যুক্ত করে আমি টিএমউক্স অংশটি দিয়ে চালিয়ে দেব;

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

আমি ব্যবহার করি exec sh -c 'tmux a || 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 has-sessionশূন্য প্রস্থান স্থিতি (সত্য) দিয়ে ফিরে আসে তবে সংযুক্ত করার জন্য একটি উপলব্ধ সেশন রয়েছে session এটি সংযুক্ত করুন।

যদি তা না হয় তবে একটি নতুন সেশন তৈরি করুন।

এটি tmuxআপনার লগইন শেল হিসাবে ব্যবহার করাও সম্ভব । তবে আপনি যদি এটি করেন তবে default-shellআপনার ~/.tmux.confফাইলে একটি আসল শেল সেট করা নিশ্চিত করুন (এটি সম্পর্কে আরও তথ্যের জন্য tmux ম্যানুয়াল দেখুন)।


1

chshTmux কে ডিফল্ট শেল হিসাবে সেট করতে আপনি কমান্ডটি ব্যবহার করতে পারেন ( তারপরে সম্ভবত এটি হওয়া উচিত) , তারপরে নিম্নলিখিতটি যুক্ত করুন .tmux.conf:

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

লাইনের শেষে পথটি পরিবর্তন করার কথা মনে রাখবেন।


1

শর্তসাপেক্ষ অধিবেশন চেকিংয়ের সাথে আমি বিস্তৃত চেকগুলি একত্রিত করেছি এবং এর সাথে সংযুক্ত বা অন্যটি তৈরি হওয়া কোনও ডিফল্ট সেশন তৈরি করতে আমার নিজের স্পিনটি এতে লাগিয়েছি। আপনি অন্য কোনও টিএমএক্স সেশনের অভ্যন্তরে না থাকলে বা অন্যান্য সুরক্ষামূলক শর্ত পূরণ না করে।

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 এ সংজ্ঞায়িত করা হয়। সুতরাং আপনি রুট হয়ে ও সম্পাদনা করতে পারেন / ইত্যাদি / পাসডাব্লু, উদাহরণস্বরূপ sudo vi /etc/passwdআপনার ব্যবহারকারী নাম দিয়ে শুরু হওয়া লাইনটি অনুসন্ধান করুন। এটি সম্ভবত শেষ হয় :/bin/bash। / বিন / বাশকে / usr / bin / tmux এ পরিবর্তন করুন এবং এখন tmux হ'ল আপনার ডিফল্ট লগইন শেল।

তবে কোনও গ্যারান্টি নেই যে এটি সমস্যার কারণ হবে না!

কি ভাল কাজ করতে পারে হয় না যে কিছু root ব্যবহারকারীর অধিকার উপস্থিত requries না। আমি আমার বাসা ডিরেক্টরীতে .bash_login নামে একটি ফাইল তৈরি করার চেষ্টা করব এবং সেই ফাইলের মধ্যে থেকে tmux শুরু করব: `প্রতিধ্বনি" tmux "> ~ / .bash_login।

এটি কাজ করা উচিত, তবে আপনাকে আমাদের নিজের চেষ্টা করে দেখতে হবে, b / c বাশ ডকুমেন্টেশন কখন ফাইল পড়বে এবং কখন কার্যকর করা হবে সে সম্পর্কে খুব সঠিক নয়।


2
আপনার প্রথম অনুচ্ছেদে যা বর্ণনা করে তা কী chsh! আপনার উপায়টি রুট হওয়ার প্রয়োজন ছাড়াও ত্রুটি-প্রবণ। চলমান tmuxথেকে .bash_loginহয় আরো দূরবর্তী লগইন ভেঙে যাবার সম্ভাবনা।
গিলস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.