আমি যে শেলগুলিতে আছি তার "স্তর" কীভাবে জানবেন?


32

আমি যদি টার্মিনালটি খুলি তবে আমার xtermশেল থাকবে। তারপরে আমি যদি ব্যবহার করি sshবা zshআমার কাছে শেলের আরও একটি "স্তর" থাকবে। এগুলি থেকে বেরিয়ে আসার জন্য আমার কতবার Ctrl+Dবা টাইপ exitকরতে হবে তা জানার কোনও উপায় আছে ? আমার আসল উদ্দেশ্য হ'ল "রুট" শেল বাদে সবকিছু থেকে বেরিয়ে আসা to

screenসমাধানটিতে টার্মিনাল মাল্টিপ্লেক্সার (লাইক ) এর কী প্রভাব রয়েছে তা জেনেও ভাল লাগবে ।

পিএস: দয়া করে শিরোনাম পরিবর্তন করতে নির্দ্বিধায়, আমি জানি না যে এটি সঠিক পদগুলি কিনা।

উত্তর:


6

একটি (স্বীকৃত নিখুঁত নয়) উপায় হ'ল ps --no-headers -o comm $PPIDআপনার শেল প্রম্পটে ফলাফল যুক্ত করা। এটি আপনাকে যে প্রক্রিয়াটির শেল তৈরি করেছে তার নাম বলবে। যদি আপনি কোনও নেস্টেড zsh এর ভিতরে থাকেন তবে এটি "zsh" বলবে। আপনি যদি শীর্ষ স্তরের zsh এর ভিতরে থাকেন তবে এটি "xterm" বা "স্ক্রিন" বা আপনার শেলটি যা চলছে তা পড়বে।

আপনি কোনও ssh বা su সেশনের মধ্যে আছেন কিনা তা জানাতে, আপনি কেবল আপনার প্রম্পটের হোস্টনাম এবং ব্যবহারকারীর নামটি দেখতে পারেন।

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


আআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআহহহ ... চটপট .. আমাকে মারতে। :) +1
স্টিফান

বর্তমানে আমি একটি ম্যাক এ আছি এবং কমান্ড আমাকে দিয়েছে ps: illegal option -- -, কেন কোনও ধারণা কেন? আমি শীঘ্রই এটি আবার লিনাক্সে পরীক্ষা করব :)
ফোনেহেহে

3
@ ফুনেহে: --option-nameবেশিরভাগই জিএনইউ-নির্দিষ্ট বৈশিষ্ট্য, তাই লিনাক্সের বাইরে বেশিরভাগ স্ট্যান্ডার্ড সিস্টেম ইউটিলিটিতে পাওয়া যায় না। তবে আপনি কলামের নাম ps --no-headersযুক্ত করে পোর্টেবলের প্রভাব পেতে পারেন =। এছাড়াও commকলামটি পসিক্স নয়, cmdকলামটি (যাতে কমান্ডের যুক্তিগুলি অন্তর্ভুক্ত)। এছাড়াও -pPOSIX সিনট্যাক্স মধ্যে PID, সামনে প্রয়োজনীয়। সুতরাং ps -o cmd= -p $PPIDবহনযোগ্য এবং অনুরূপ তথ্য দেয়।
গিলস 'অশুভ হওয়া বন্ধ করুন'

নিশ্চিত,
জেন্টুতে

2
@ ফুনেহে: দুঃখিত, আমি উপরের মন্তব্যে একটি ভুল করেছি। আসলে commকলামটি পসিক্স দ্বারা নির্দিষ্ট করা হয়েছে এবং ম্যাক ওএস এক্সে নথিভুক্ত করা হয়েছে, যেখানে cmdকলামটি লিনাক্সে উপস্থিত রয়েছে তবে মানক নয়।
গিলস 'অশুভ হওয়া বন্ধ করুন'

37

আপনি আসলে সঠিক শব্দটির উপর আঘাত করেছেন ¹ একটি পরিবেশের পরিবর্তনশীল রয়েছে SHLVLযা সমস্ত বড় ইন্টারেক্টিভ শেল (বাশ, টিসিএসসি, জেডএস) যখন শুরু হয় তখন তাদের দ্বারা 1 বৃদ্ধি হয়। সুতরাং আপনি যদি শেলের ভিতরে শেল শুরু করেন তবে SHLVL1 দ্বারা বৃদ্ধি পায়।

এটি সরাসরি আপনার উদ্বেগের উত্তর দেয় না, কারণ SHLVLটার্মিনাল এমুলেটরগুলির মতো জিনিসকে বহন করে। উদাহরণস্বরূপ, আমার সাধারণ কনফিগারেশনে, $SHLVLএকটি এক্সটার্মে 2 হয়, কারণ স্তর 1টি শেলের সাথে সঙ্গতিপূর্ণ যা আমার এক্স সেশন ( ~/.xinitrcবা ~/.xsession) চালায় ।

আমি যা করি তা $SHLVLআমার প্রম্পটে প্রদর্শিত হয়, তবে কেবল তখনই যদি শেলের মূল প্রক্রিয়াটি অন্য শেল হয় ("যদি এর নামটি shপ্লাস optionচ্ছিক বিরামচিহ্ন এবং অঙ্কগুলিতে শেষ হয় তবে এটি একটি শেল") he এইভাবে, অন্য শেলের নীচে চলার শেল অস্বাভাবিক ক্ষেত্রে আমার কাছে একটি স্পষ্ট দৃশ্যমান ইঙ্গিত রয়েছে।

সম্ভবত আপনি শেলগুলি সনাক্ত করতে পছন্দ করবেন যা সরাসরি টার্মিনাল এমুলেটারের অধীনে চলছে। আপনি এটি মোটামুটি নির্ভুলভাবে করতে পারেন: এগুলি শেলগুলি যার প্যারেন্ট প্রসেসটির একটি আলাদা কন্ট্রোলিং টার্মিনাল রয়েছে, যাতে ps -o tty= -p$$এবং ps -o tty= -p$PPIDবিভিন্ন আউটপুট উত্পাদন করে। আপনি SHLVLএই শেলগুলিতে ম্যানুয়ালি 1 এ পুনরায় সেট করতে পারেন বা এই শেলগুলিতে আপনার নিজের TERMSHLVL1 এ সেট করতে পারেন (এবং অন্যথায় বাড়ানো)।

¹ যদিও এটি ম্যানুয়াল পৃষ্ঠাগুলি দেখে মনে হচ্ছে না: এটি সমর্থন করে এমন তিনটি শেলের কোনওটিতেই তাদের ডকুমেন্টেশনে "স্তর" শব্দটি অন্তর্ভুক্ত নয় SHLVL


শব্দটি নিশ্চিত করার জন্য ধন্যবাদ। আমি এখনও একটি ম্যাকের উপর আছি এবং অবাক হয়েছি যে আমার শেল স্তর নির্বিশেষে 2 টি কমান্ড একই ফলাফল দেয়।
phunehehe

@ ফুনেহেহে: কি 2 কমান্ড? যদি আপনি বোঝাতে চান ps -o tty= -p$pid, এটি প্রক্রিয়াটির নিয়ন্ত্রণকারী টার্মিনালটি দেখায়, যা প্রক্রিয়াটি চলছে তা টার্মিনাল এমুলেটর (xterm, স্ক্রিন, sshd,…) সনাক্ত করে another অন্য শেল থেকে শেল শুরু করলে পরিবর্তন হবে না, তবে আপনি পরিবর্তন করতে পারবেন একটি নতুন টার্মিনাল এমুলেটর শুরু করুন। যদি টার্মিনাল এমুলেটরটি একটি স্থানীয় ম্যাক অ্যাপ্লিকেশন হয় তবে ম্যাক-নির্দিষ্ট সূক্ষ্মতা থাকতে পারে যা সম্পর্কে আমি অজানা।
গিলস 'অশুভ হওয়া বন্ধ করুন'

ps -o tty= -p$$ এবং ps -o tty= -p$PPID , কারণ আপনি বলেছিলেন যে তাদের আলাদা আউটপুট তৈরি করা উচিত। নাকি আমি কিছু ভুল বুঝেছি?
phunehehe

@ ফুনেহে: শেলটির প্যারেন্ট প্রসেসটি যদি টার্মিনাল এমুলেটর হয় তবে তারা বিভিন্ন আউটপুট দেয় কারণ টার্মিনাল এমুলেটরের নিয়ন্ত্রণকারী টার্মিনাল হিসাবে এটির এমুলেটেড টার্মিনাল নেই। যদি আপনি অন্যথায় খুঁজে পান তবে দয়া করে আউটপুট পোস্ট করুন ps -p $$ -p $PPID(আবার, আমার কোনও OSX অভিজ্ঞতা নেই, সুতরাং ওএসএক্সে কিছু অস্বাভাবিক কিছু ঘটতে পারে)।
গিলেজ 'SO- স্টপ হচ্ছে মন্দ'

@ গিলস: ওএসএক্সের সাথে এটি আসলেই কিছু অস্বাভাবিক ছিল। আমি জেন্টুতে পরীক্ষা করেছিলাম এবং আপনি যেমন বলেছিলেন ঠিক ততই ঠিক ছিল। উপর ওএসএক্স, ps -p $$ -p $PPIDদেয় (দুঃখিত আমি মন্তব্য ফরম্যাট করতে কিভাবে জানি না) PID, পির TTY TIME এ সিএমডি 209 ttys000 0: 00,01 লগইন -pf phunehehe 210 ttys000 0: 00,12 -bash
phunehehe

1

খুব মার্জিত নয়, তবে আপনার চালকের অন্যান্য চলমান সংস্থার সাথে পিতা-সন্তানের সম্পর্ক দেখার জন্য আপনি হিপটে গাছের দৃশ্য ব্যবহার করতে পারেন ।

$ htop # then press 't' and scroll around or 'Ctrl-W' to find your shell proccess

"শিকড়" শেলটিতে পৌঁছনোর আগে আপনাকে যে শেলগুলির বাইরে বেরিয়ে আসতে হবে তার পরিমাণ কমিয়ে আনতে এটি ব্যবহার করুন


1

আপনি পরিবেশের পরিবর্তনশীল SHLVL ব্যবহার করতে পারেন :

echo "$SHLVL"

1
আপনি যদি sshএকই অ্যাকাউন্টে উদাহরণ ব্যবহার করেন তবে এটি এখনও থাকবে1
আন্থন

0

আমি যে খুঁজে

$ pstree -u | grep ${USER}

আমি সিস্টেমে কোথায় "ফিট" আছি তা দেখার জন্য বেশ সহায়ক হতে পারে। আমি এটি পছন্দ pstree -u ${USER}

মাঝেমধ্যে এটি আমাকে মনে করিয়ে দেবে যে আমি কোনও nohupকাজ চালাচ্ছি, বা অনুরূপ।

(এছাড়াও, আমি ব্যবহার করি alias grep='grep --color=auto'।)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.