পরীক্ষা কমান্ড [ -t 1 ]
কিনা তা পরীক্ষা ব্যাশ এর আউটপুট টার্মিনাল চালু আছে। এই লাইনের উদ্দেশ্যটি পরিষ্কারভাবে zsh চালানো যখন টার্মিনালটি খোলার সময় ব্যাশের অন্যান্য ব্যবহার ব্যাহত না করে run তবে এটি খুব খারাপভাবে করা হয়েছে।
ফাইলটি .bashrc
তিন পরিস্থিতিতে পড়েছে:
- যখন ব্যাশটি একটি ইন্টারেক্টিভ শেল হিসাবে কার্যকর করা হয়, অর্থাত ব্যাচ কমান্ডগুলি প্রয়োগ করার পরিবর্তে ব্যবহারকারী দ্বারা টাইপ করা কমান্ডগুলি চালানো।
- যখন ব্যাশ একটি অ-ইন্টারেক্টিভ শেল যা কোনও আরএসএইচ বা এসএসএইচ ডেমন দ্বারা চালিত হয় (সাধারণত আপনি চালিত হন
ssh host.example.com somecommand
এবং বাশ আপনার লগইন শেল চালু থাকে host.example.com
)।
- যখন এটি স্পষ্টভাবে আহ্বান করা হয়, যেমন কোনও ব্যবহারকারীর
.bash_profile
( স্টার্টআপ ফাইলগুলির বাশের পছন্দটি কিছুটা অদ্ভুত )।
[ -t 1 ]
ইন্টারেক্টিভ শেলগুলি সনাক্ত করার একটি দরিদ্র উপায়। স্ট্যান্ডার্ড আউটপুট টার্মিনালে না যাওয়ার সাথে আন্তঃক্রিয়াশীলভাবে বাশ চালানো এটি সম্ভব তবে বিরল। অ-ইন্টারেক্টিভ শেলটিতে স্ট্যান্ডার্ড আউটপুটটি টার্মিনালে যাওয়া আরও সাধারণ বিষয়; একটি অ-ইন্টারেক্টিভ শেলের কোনও ব্যবসা চলছে না .bashrc
তবে দুর্ভাগ্যক্রমে এসএসএইচ দ্বারা চালিত বাশ শেল। আরও অনেক ভাল উপায় আছে: বাশ (এবং অন্য কোনও শ-শৈলীর শেল) এটি করার জন্য একটি অন্তর্নিহিত, নির্ভরযোগ্য পদ্ধতি সরবরাহ করে।
case $- in
*i*) echo this shell is interactive;;
*) echo this shell is not interactive;;
esac
সুতরাং "লঞ্চ zsh যদি এটি একটি ইন্টারেক্টিভ শেল হয়" লিখতে হবে
case $- in
*i*) exec zsh;;
esac
তবে এটি কোনও ভাল ধারণা নয়: এটি ব্যাশ শেলটি খোলার প্রতিরোধ করে, যা আপনি zsh ব্যবহার করেও দরকারী। এই ব্লগ পোস্টটি ভুলে যান এবং কেবল আপনার শর্টকাটটি কনফিগার করুন যা ব্যাশের পরিবর্তে zsh চালানোর জন্য একটি টার্মিনাল খোলে। জিনিসগুলি এমনভাবে সাজান না যাতে "আপনি যখনই উইন্ডোজে ব্যাশ অ্যাপ্লিকেশনটি খুলবেন, এটি এখন Zsh শেল দিয়ে শুরু হবে": আপনি যখন zsh চান, Zsh অ্যাপ্লিকেশনটি খুলুন।
bash
পড়তে পারেন.bashrc
এমনকি যখন না ইন্টারেক্টিভ (মতssh host cmd
যেখানেbash
হোস্ট ব্যবহারকারীর লগ-ইন শেল, অথবাbash --login -c 'some code'
যেখানে.bash_profile
সূত্র.bashrc
)।case $- in *i*)...
শেল ইন্টারেক্টিভ হয় কিনা তা পরীক্ষা করার সঠিক উপায়।