এই ফ্লোচার্টের ব্যাখ্যায়
আমি খুঁজে পেয়েছি যে মানুষের বাশ:
যখন বাশকে একটি ইন্টারেক্টিভ লগইন শেল হিসাবে, বা - লোগিন বিকল্পের সাথে একটি অ-ইন্টারেক্টিভ শেল হিসাবে ডাকা হয়, এটি প্রথমে ফাইল / ইত্যাদি / প্রোফাইল থেকে কমান্ডগুলি পড়ে এবং কার্যকর করে, যদি সেই ফাইলটি বিদ্যমান থাকে।
এতে বলা হয়েছে যে ইন্টারেক্টিভ লগইন শেলগুলি /etc/profile
(--noprofile ছাড়াই) পড়া
এছাড়াও, বিকল্পটি পড়ার সাথে অ-ইন্টারেক্টিভ শেল--login
/etc/profile
এটি মনে হয় কিছু সম্ভাব্য লগইন শেলগুলি (যার $0
সাথে ক দিয়ে শুরু হয় -
) যে অ-ইন্টারেক্টিভ হচ্ছে (কোনও স্ক্রিপ্ট চালান, সম্ভবত সহজ date
) পড়তে পারে না (উত্স) /etc/profile
।
এই ধারণাটি নিশ্চিত বা অস্বীকার করতে:
প্রথমে আমি ব্যবহারের চেষ্টা করেছি su -l -
, যা -
প্রথম অক্ষর হিসাবে একটি লগইন শেল শুরু করে তবে আমি এটি অ-ইন্টারেক্টিভ করতে ব্যর্থ হয়েছি (এবং এটি অনুসন্ধানের জন্য পরীক্ষাগুলি উপস্থাপন করতে সক্ষম হব)।
এরকম কিছু ডাকছে
$ bash -c 'date' -bash
লগইন শেল হিসাবে প্রতিবেদন করে না (এমনকি প্রথম অক্ষরটি একটি হলেও -
)।
বিস্তারিত প্রকাশ করার জন্য এটি চেষ্টা করুন:
$ bash -c 'echo "$0 $- ||$(shopt -p login_shell)||";date' -bash -bash hBc ||shopt -u login_shell|| Fri Aug 19 06:32:31 EDT 2016
$0
একটি আছে-
প্রথম অক্ষর যেমন, কোনi
মূল্য (ইন্টারেক্টিভ)$-
কিন্তু এটি একটি নয় বলে প্রতিবেদন করা হয়login_shell
(-u)। এই ক্ষেত্রে, / ইত্যাদি / প্রোফাইলটি পড়েনি, তবে আমি নিশ্চিত নই যে এটি সঠিক পরীক্ষা।
এই প্রশ্নের জন্য যথেষ্ট নির্দিষ্ট না করে এই উত্তরে "বিরল অ-ইন্টারেক্টিভ লগইন শেলস" এর উল্লেখ রয়েছে।
এই লোক শেষে যে /etc/profile
সবসময় পড়া হয়।
সংক্ষিপ্ত তালিকাটি পড়ুন: ইন্টারেক্টিভ এবং অ-ইন্টারেক্টিভ লগইন শেলগুলি উভয়ই পড়ুন /etc/profile
এবং, যদি এই পৃষ্ঠাটির উদাহরণগুলি সঠিক হয়:
Some examples
$ su bob # interactive non-login shell
$ su - bob # interactive login shell
$ exec su - bob # interactive login shell
$ exec su - bob -c 'env' # non-interactive login shell
$ ssh bob@example.com # interactive login shell, `~/.profile`
$ ssh bob@example.com env # non-interactive non-login shell, `~/.bashrc`
exec su - bob -c 'env'
প্রতিবেদনগুলির পরীক্ষা যা /etc/profile
পড়েছিল।
সংক্ষেপে:
একটি অ-ইন্টারেক্টিভ লগইন শেল ( - লগিন বা -l দিয়ে বলা হয় না) পাওয়া কি সম্ভব?
এবং যদি সত্য হয়, এটি /etc/profile
ফাইলটি পড়ছে ?
উপরেরটি সত্য হলে আমাদের উপসংহারে পৌঁছে যেতে হবে যে সমস্ত লগইন শেলগুলি [ইন্টারেক্টিভ (বা না)] পড়ুন / ইত্যাদি / প্রোফাইল (কোনও --noprofile
বিকল্প নেই)।
দ্রষ্টব্য: / etc / প্রোফাইলটি পড়ছে তা সনাক্ত করতে, এই কমান্ডটি ফাইলের একেবারে শুরুতে যুক্ত করুন:
echo "'/etc/profile' is being read"
--login
বিকল্পটি ব্যবহার করছে । দ্বিতীয়টির জন্য, আমি যদি পাইexec -a "-bash" "bash" <<<"shopt -p login_shell; echo $0 $-"
(সি কোয়েটে এনকোডড)$'/etc/profile read\nshopt -s login_shell\nbash himBH'
তাই, এটি লগইন হয় তবে এটি ইন্টারেক্টিভ। আমাদের লগইন এবং অ-ইন্টারেক্টিভ দরকার । আমি কী মিস করছি এটি?