আমি আমার ডিফল্ট বাশ শেলটি সর্বদা প্রতিবার 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 tmux
tmux 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 ম্যানুয়াল দেখুন)।
chsh
Tmux কে ডিফল্ট শেল হিসাবে সেট করতে আপনি কমান্ডটি ব্যবহার করতে পারেন ( তারপরে সম্ভবত এটি হওয়া উচিত) , তারপরে নিম্নলিখিতটি যুক্ত করুন .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
অসীম লুপ না হওয়ার প্রয়োজন (একই পৃষ্ঠা থেকে)