আপনি আসলে সঠিক শব্দটির উপর আঘাত করেছেন ¹ একটি পরিবেশের পরিবর্তনশীল রয়েছে SHLVL
যা সমস্ত বড় ইন্টারেক্টিভ শেল (বাশ, টিসিএসসি, জেডএস) যখন শুরু হয় তখন তাদের দ্বারা 1 বৃদ্ধি হয়। সুতরাং আপনি যদি শেলের ভিতরে শেল শুরু করেন তবে SHLVL
1 দ্বারা বৃদ্ধি পায়।
এটি সরাসরি আপনার উদ্বেগের উত্তর দেয় না, কারণ SHLVL
টার্মিনাল এমুলেটরগুলির মতো জিনিসকে বহন করে। উদাহরণস্বরূপ, আমার সাধারণ কনফিগারেশনে, $SHLVL
একটি এক্সটার্মে 2 হয়, কারণ স্তর 1টি শেলের সাথে সঙ্গতিপূর্ণ যা আমার এক্স সেশন ( ~/.xinitrc
বা ~/.xsession
) চালায় ।
আমি যা করি তা $SHLVL
আমার প্রম্পটে প্রদর্শিত হয়, তবে কেবল তখনই যদি শেলের মূল প্রক্রিয়াটি অন্য শেল হয় ("যদি এর নামটি sh
প্লাস optionচ্ছিক বিরামচিহ্ন এবং অঙ্কগুলিতে শেষ হয় তবে এটি একটি শেল") he এইভাবে, অন্য শেলের নীচে চলার শেল অস্বাভাবিক ক্ষেত্রে আমার কাছে একটি স্পষ্ট দৃশ্যমান ইঙ্গিত রয়েছে।
সম্ভবত আপনি শেলগুলি সনাক্ত করতে পছন্দ করবেন যা সরাসরি টার্মিনাল এমুলেটারের অধীনে চলছে। আপনি এটি মোটামুটি নির্ভুলভাবে করতে পারেন: এগুলি শেলগুলি যার প্যারেন্ট প্রসেসটির একটি আলাদা কন্ট্রোলিং টার্মিনাল রয়েছে, যাতে ps -o tty= -p$$
এবং ps -o tty= -p$PPID
বিভিন্ন আউটপুট উত্পাদন করে। আপনি SHLVL
এই শেলগুলিতে ম্যানুয়ালি 1 এ পুনরায় সেট করতে পারেন বা এই শেলগুলিতে আপনার নিজের TERMSHLVL
1 এ সেট করতে পারেন (এবং অন্যথায় বাড়ানো)।
¹
যদিও এটি ম্যানুয়াল পৃষ্ঠাগুলি দেখে মনে হচ্ছে না: এটি সমর্থন করে এমন তিনটি শেলের কোনওটিতেই তাদের ডকুমেন্টেশনে "স্তর" শব্দটি অন্তর্ভুক্ত নয় SHLVL
।