আমি আমার ডিফল্ট বাশ শেলটি সর্বদা প্রতিবার tmux টাইপ না করে সরাসরি tmux এ যেতে চাই।
আমি আমার ডিফল্ট বাশ শেলটি সর্বদা প্রতিবার tmux টাইপ না করে সরাসরি tmux এ যেতে চাই।
উত্তর:
এটি কাজ করে বলে মনে হচ্ছে ...
https://wiki.archlinux.org/index.php/Tmux#Start_tmux_on_every_shell_login
আপনার উপनावগুলির আগে কেবল আপনার .bashrc এ নিম্নলিখিত বাশ কোডের লাইনটি যুক্ত করুন; অন্যান্য শেলগুলির জন্য কোডটি খুব সমান:
[[ $TERM != "screen" ]] && exec tmux
TERMব্যবহারকারীর .tmux.confফাইল দ্বারা অন্য কোনও মান সেট করা যেতে পারে । TMUXভেরিয়েবল সেট করা আছে কি না তা যাচাই করা আরও ভাল ।
@ স্টারনামারের উত্তরটি সাধারণত সঠিক, যদিও আমি সাধারণত (1) টিএমউক্সটি সিস্টেমে রয়েছে তা নিশ্চিত করার জন্য নিম্নলিখিত পরীক্ষাগুলি অন্তর্ভুক্ত করি, (২) আমরা একটি ইন্টারেক্টিভ শেলের মধ্যে রয়েছি, এবং (3) টিএমউক্সের মধ্যে চলার চেষ্টা করে না নিজেই:
if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
exec tmux
fi
তথ্যসূত্র
commandকমান্ডের অস্তিত্বের জন্য বাশ ব্যবহার করে - http://man7.org/linux/man-pages/man1/bash.1.html#SHELL_BUILTIN_COMMANDScommandপরিবর্তে কেন ব্যবহার whichকরবেন - https://unix.stackexchange.com/a/85250$PS1ইন্টারেক্টিভ শেলটি পরীক্ষা করতে ব্যবহার করা - https://www.gnu.org/software/bash/manual/html_node/Is-this-Shell-Interactive_003f.html$TERM"Tmux এর ভিতরে চলমান সমস্ত প্রোগ্রামের জন্য পরিবেশের পরিবর্তনশীল" এর প্রত্যাশিত অবস্থা - http://man7.org/linux/man-pages/man1/tmux.1.html#WINDOWS_AND_PANEScommandআগে প্রয়োজন ছিল কিন্তু বুঝতে পারিনি এটি বিদ্যমান।
execবিবৃতিটি আপনাকে পুরো টার্মিনালটি ছাড়াই tmux ছাড়তে দেয় না! : |
execবর্তমান প্রক্রিয়াটিকে একটি নতুনের সাথে প্রতিস্থাপন করে - এই ক্ষেত্রে এটি ব্যাশ লগইন শেলটি টিএমউক্সের সাথে প্রতিস্থাপন করে, তাই যখন টিএমুক্স প্রস্থান করে তখন আর ফিরে যাওয়ার আর কোনও টার্মিনাল নেই :)
exec tmuxtmux attach
exec tmuxআমি ব্যবহার করি exec tmux new-session -A -s mainতাই আমি সর্বদা প্রধান নামে একটি সেশন রাখি এবং এটিতে সংযুক্ত থাকি (প্রতিটি সময় আমি আমার রিমোট মেশিনে সংযোগ স্থাপনের পরিবর্তে একটি নতুন তৈরি করার পরিবর্তে) তবে tmux attachকোনও সেশন উপলব্ধ না হলে এটি ব্যবহার করার মতো ক্রাশ হবে না (এখানে পাওয়া যাবে: unix.stackexchange.com/a/176885/256942 )
লাইনের মতো যুক্ত করা
[ -z "$TMUX" ] && { tmux attach || exec tmux new-session && exit;}
আপনার বাশার্ক ফাইলটিতে সম্ভবত কাজটি হবে। নোট করুন এই লাইনটি ssh থেকে প্রস্থান করবে এবং একবার আপনি tmux কে বিচ্ছিন্ন বা প্রস্থান করার পরে সংযোগটি শেষ করবে। সংযোগটি সমাপ্ত করার জন্য এটি কী স্ট্রোকগুলি সংরক্ষণ করে বলে আমি এই কনফিগারেশনটি পছন্দ করি। তবে আপনি যদি এটি পছন্দ না করেন (যা আমি মনে করি খুব সম্ভবত) এবং এটি সমাপ্তির পরে লগইন শেলের মধ্যে থেকে যায় তবে কেবল exitঅংশটি সরিয়ে ফেলুন :
[ -z "$TMUX" ] && { tmux attach || exec tmux new-session;}
এছাড়াও মনে রাখবেন যে আপনার tmux attachসাথে মোড়ানো উচিত নয় exec, কারণ এতে কোনও টিএমউक्स সেশন সংযুক্ত হওয়ার সময় সংযোগ বন্ধ হয়ে যেতে পারে।
chshলগইন শেল পরিবর্তন করে এমন কমান্ড রয়েছে । পরামর্শ man chsh।
tmuxশেল নয়, এটি জিএনইউ স্ক্রিনের মতো টার্মিনাল মাল্টিপ্লেক্সার । মজার বিষয় হচ্ছে -cএটি ম্যান পৃষ্ঠা অনুসারে বিকল্পটিকে সমর্থন করে , সুতরাং এটি আপনার লগইন শেল হিসাবে এটি ব্যবহার করার জন্য যথেষ্ট শেলের মতো কাজ করতে পারে তবে আমি সন্দেহ করি যে এটি সমস্ত পরিস্থিতিতে সঠিকভাবে কাজ করবে না, যেমন gdm / kdm এর মাধ্যমে গ্রাফিকাল লগইন ।
ssh $some_server echo foo) এর মাধ্যমে সরাসরি কমান্ড কার্যকর করতে পারে বলে মনে হচ্ছে ।
/etc/shells, সুতরাং এটি একটি বৈধ লগইন শেল।
default-shellসত্য শেলকে নির্দেশ করতে tmux কনফিগারেশনে সেটিংসটি কনফিগার করতে হবে।
আমি সফলভাবে ব্যবহার করছি
case $- in *i*)
[ -z "$TMUX" ] && exec tmux
esac
আমার মধ্যে .zshrc। আপনি ব্যাশ ব্যবহার করেন, তাহলে এটি আপনার রাখা .bashrcপরিবর্তে।
আমি কেবলমাত্র tmuxআমার ডিফল্ট শেল ( chsh -s $(which tmux)) হিসাবে সেট করার চেষ্টা করেছি এবং এটি এসএসএইচ-এর মাধ্যমে সরাসরি কমান্ড প্রয়োগ কার্যকর করতে পারে বলে মনে হচ্ছে ssh $some_server echo fooকোনও আউটপুট উত্পাদন করবে না।
উপরের প্রতিক্রিয়াগুলির কোনও আমার পক্ষে কাজ করে নি - 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 &
@ লুইস ম্যাডক্সের উত্তরে যুক্ত করে আমি টিএমউক্স অংশটি দিয়ে চালিয়ে দেব;
(exec tmux attach || exec tmux new-session)
exec sh -c 'tmux a || tmux', যা (আপনার উত্তরটি দেখার পরে) সম্ভবত টিমুক্স কোনও কারণে শুরু করতে না পারলে খারাপ ঘটনা ঘটবে ..... ধন্যবাদ, আমি এখন থেকে আপনার ব্যবহার করব :)
tmux new -A -s mysessionসম্ভবত খুব কাজ করবে।
এটি আমার মধ্যে রয়েছে ~/.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 ম্যানুয়াল দেখুন)।
chshTmux কে ডিফল্ট শেল হিসাবে সেট করতে আপনি কমান্ডটি ব্যবহার করতে পারেন ( তারপরে সম্ভবত এটি হওয়া উচিত) , তারপরে নিম্নলিখিতটি যুক্ত করুন .tmux.conf:
set-option -g default-shell /path/to/your/favourite/shell
লাইনের শেষে পথটি পরিবর্তন করার কথা মনে রাখবেন।
শর্তসাপেক্ষ অধিবেশন চেকিংয়ের সাথে আমি বিস্তৃত চেকগুলি একত্রিত করেছি এবং এর সাথে সংযুক্ত বা অন্যটি তৈরি হওয়া কোনও ডিফল্ট সেশন তৈরি করতে আমার নিজের স্পিনটি এতে লাগিয়েছি। আপনি অন্য কোনও টিএমএক্স সেশনের অভ্যন্তরে না থাকলে বা অন্যান্য সুরক্ষামূলক শর্ত পূরণ না করে।
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
এই উত্তরের উপর ভিত্তি করে:
এটি আপনার মধ্যে যোগ করুন ~/.tmux.conf
set -g default-command /usr/local/bin/fish
মাইকেল যেমনটি ইতিমধ্যে তার মন্তব্যে tmux থাকার জন্য জানিয়েছে যেহেতু আপনার লগইন শেলটির পার্শ্ব প্রতিক্রিয়া হতে পারে। কিন্তু আপনি tmuxআপনার ডিফল্ট শেলটি আক্ষরিক অর্থে তৈরি করতে পারেন । ব্যবহারকারীর ডিফল্ট শেলটি / etc / passwd এ সংজ্ঞায়িত করা হয়। সুতরাং আপনি রুট হয়ে ও সম্পাদনা করতে পারেন / ইত্যাদি / পাসডাব্লু, উদাহরণস্বরূপ sudo vi /etc/passwdআপনার ব্যবহারকারী নাম দিয়ে শুরু হওয়া লাইনটি অনুসন্ধান করুন। এটি সম্ভবত শেষ হয় :/bin/bash। / বিন / বাশকে / usr / bin / tmux এ পরিবর্তন করুন এবং এখন tmux হ'ল আপনার ডিফল্ট লগইন শেল।
তবে কোনও গ্যারান্টি নেই যে এটি সমস্যার কারণ হবে না!
কি ভাল কাজ করতে পারে হয় না যে কিছু root ব্যবহারকারীর অধিকার উপস্থিত requries না। আমি আমার বাসা ডিরেক্টরীতে .bash_login নামে একটি ফাইল তৈরি করার চেষ্টা করব এবং সেই ফাইলের মধ্যে থেকে tmux শুরু করব: `প্রতিধ্বনি" tmux "> ~ / .bash_login।
এটি কাজ করা উচিত, তবে আপনাকে আমাদের নিজের চেষ্টা করে দেখতে হবে, b / c বাশ ডকুমেন্টেশন কখন ফাইল পড়বে এবং কখন কার্যকর করা হবে সে সম্পর্কে খুব সঠিক নয়।
chsh! আপনার উপায়টি রুট হওয়ার প্রয়োজন ছাড়াও ত্রুটি-প্রবণ। চলমান tmuxথেকে .bash_loginহয় আরো দূরবর্তী লগইন ভেঙে যাবার সম্ভাবনা।
[[ $- != *i* ]] && returnঅসীম লুপ না হওয়ার প্রয়োজন (একই পৃষ্ঠা থেকে)