পসিক্স শেলগুলিতে, .একটি বিশেষ অন্তর্নির্মিত, সুতরাং এটির ব্যর্থতার ফলে শেলটি প্রস্থান হতে পারে (কিছু শেলের মতো bashএটি পসিক্স মোডে থাকলেই হয়)।
ত্রুটি হিসাবে কী যোগ্য হয় তা শেলের উপর নির্ভর করে। ফাইলটি বিশ্লেষণের সময় তাদের বাক্যগুলি সিন্ট্যাক্স ত্রুটি থেকে বেরিয়ে আসে না তবে সর্বাধিক ফাইলটি খুঁজে পাওয়া যায় না বা খোলা না গেলে বেশিরভাগ প্রস্থান করতে পারে। আমি জানতে পারি না যে উত্সাহিত ফাইলের শেষ কমান্ডটি শূন্য-বহির্গমন স্থিতি (যদি errexitবিকল্পটি অবশ্যই না থাকে) দিয়ে ফিরে আসে তবে শেষ হতে পারে।
এখানে করছেন:
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
এমন একটি ঘটনা যেখানে আপনি যদি ফাইলটি সেখানে উপস্থিত থাকে তবে এটি উত্স করতে চান, এবং এটি না থাকলে না (বা এখানে খালি রয়েছে -s)।
অর্থাৎ, ফাইলটি না থাকলে এটিকে ত্রুটি হিসাবে বিবেচনা করা উচিত নয় (POSIX শেলগুলিতে মারাত্মক ত্রুটি) that ফাইলটিকে একটি alচ্ছিক ফাইল হিসাবে বিবেচনা করা হয়।
ফাইলটি যদি পাঠযোগ্য না হয় বা ডিরেক্টরি ছিল বা (কিছু শেলের মধ্যে) পার্স করার সময় একটি সিনট্যাক্স ত্রুটি ছিল যা এটি অবশ্যই রিপোর্ট করা উচিত It
কেউ কেউ বলবেন যে রেসের শর্ত আছে। কিন্তু শুধু এটা মানে হবে যে শেল একটি ত্রুটির কথা থেকে প্রস্থান করবে ফাইলের মধ্যে সরানো হয় [এবং ., কিন্তু আমি এটা একটি ত্রুটি বিবেচনা যে এই নির্দিষ্ট পাথ ফাইল হঠাৎ বিলুপ্ত হতে পার, অথচ স্ক্রিপ্ট হয় বৈধ নয় তর্ক করা চাই চলছে।
অন্য দিকে,
command . "$NVM_DIR/nvm.sh" 2> /dev/null
যেখানে the কমান্ডের বিশেষ বৈশিষ্ট্যটিকে commandসরিয়ে দেয় (যাতে এটি ত্রুটিযুক্ত শেল থেকে বের হয় না) এটি কাজ করবে না:.
- এটির
.ত্রুটিগুলি লুকাতে পারে তবে উত্সযুক্ত ফাইলটিতে চালিত কমান্ডগুলির ত্রুটিও hide
- এটিতে ভুল অনুমতি থাকা ফাইলের মতো প্রকৃত ত্রুটি শর্তও লুকিয়ে রাখে।
অন্যান্য সাধারণ বাক্য গঠন (উদাহরণস্বরূপ দেবি grep -r /etc/default /etc/init*স্ক্রিপ্টগুলির জন্য দেবিয়ান সিস্টেমগুলিতে দেখুন যা রূপান্তরিত systemdহয়নি এখনও (যেখানে EnvironmentFile=-/etc/default/serviceপরিবর্তে environmentচ্ছিক পরিবেশ ফাইল নির্দিষ্ট করতে ব্যবহৃত হয়)) এর মধ্যে রয়েছে:
[ -e "$file" ] && . "$file"
এটিতে থাকা ফাইলটি পরীক্ষা করে দেখুন, খালি থাকলেও উত্সটি দিন। এটি খুলতে না পারলে এখনও মারাত্মক ত্রুটি (যদিও এটি সেখানে রয়েছে, বা সেখানে ছিল)। আপনি আরও বৈকল্পিক দেখতে পাবেন [ -f "$file" ](যেমন বিদ্যমান এবং এটি একটি নিয়মিত ফাইল), [ -r "$file" ](পঠনযোগ্য) এবং এর সমন্বয়গুলি।
[ ! -e "$file" ] || . "$file"
কিছুটা উন্নত সংস্করণ। এটি পরিষ্কার করে দেয় যে ফাইলটি বিদ্যমান নেই এটি একটি ওকে কেস। এর অর্থ এটিও হ'ল $?শেষ কমান্ডের প্রস্থান স্থিতিটি প্রতিফলিত হবে $file(পূর্ববর্তী ক্ষেত্রে, আপনি যদি পেয়ে যান তবে আপনি 1জানেন না যে এটি $fileউপস্থিত ছিল না কারণ বা সেই আদেশটি ব্যর্থ হয়েছে)।
command . "$file"
ফাইলটি সেখানে থাকার প্রত্যাশা করুন, তবে এটি ব্যাখ্যা করতে না পারলে প্রস্থান করবেন না।
[ ! -e "$file" ] || command . "$file"
উপরের সংমিশ্রণ: ফাইলটি না থাকলে এটি ঠিক আছে, এবং পসিক্স শেলগুলির জন্য, ফাইলটি খুলতে (বা পার্স) করতে ব্যর্থতার খবর পাওয়া গেছে তবে তা মারাত্মক নয় (যার জন্য এটি আরও কাঙ্ক্ষিত হতে পারে ~/.profile)।
¹ দ্রষ্টব্য: zshতবে, আপনি অনুকরণে commandনা থাকলে shএমনটি ব্যবহার করতে পারবেন না ; নোট করুন যে কর্ন শেলের sourceমধ্যে আসলে একটি অ্যালাম command ., একটি অ-বিশেষ বৈকল্পিক.