/
POSIX PATH বিধি জন্য যুক্তি
নিয়মটি এখানে উল্লেখ করা হয়েছিল: বাশ এ চালানোর জন্য এক্সিকিউটেবল বা স্ক্রিপ্ট নামের আগে আপনার কেন ./ (ডট-স্ল্যাশ) দরকার? তবে আমি কেন ব্যাখ্যা করি যে আমি কেন এটি বিশদভাবে একটি ভাল ডিজাইন মনে করি।
প্রথমত, নিয়মের একটি স্পষ্ট পূর্ণ সংস্করণ হ'ল:
- পথ থাকে
/
(যেমন ./someprog
, /bin/someprog
, ./bin/someprog
): CWD ব্যবহার করা হয় এবং পথ নয়
- যদি पथ টিতে
/
(উদাঃ someprog
) না থাকে : PATH ব্যবহৃত হয় এবং CWD হয় না
এখন, ধরুন যে চলমান:
someprog
অনুসন্ধান করবে:
- প্রথমে সিডাব্লুডির সাথে সম্পর্কিত
- পরে পাঠের সাথে সম্পর্কিত
তারপরে, আপনি যদি /bin/someprog
নিজের ডিস্ট্রো থেকে চালাতে চান এবং আপনি তা করেছেন:
someprog
এটি কখনও কখনও কাজ করবে, তবে অন্যরা এটি ব্যর্থ হবে, কারণ আপনি হয়ত কোনও ডিরেক্টরিতে থাকতে পারেন যাতে অন্য কোনও সম্পর্কযুক্ত someprog
প্রোগ্রাম থাকে।
অতএব, আপনি শীঘ্রই শিখবেন যে এটি নির্ভরযোগ্য নয়, এবং আপনি যখন সর্বনিম্ন পথ ব্যবহার করতে চান তখন সর্বদা নিখুঁত পাথগুলি ব্যবহার করবেন, অতএব পথের উদ্দেশ্যকে পরাস্ত করবেন।
এই কারণেই আপনার পাঠাতে আপেক্ষিক পাথগুলি রাখা খুব খারাপ ধারণা। আমি তোমার দিকে তাকাচ্ছিnode_modules/bin
,।
বিপরীতে, ধরুন যে চলমান:
./someprog
অনুসন্ধান করবে:
- প্রথমে পাঠের সাথে সম্পর্কিত
- সিডাব্লুডির পরে আপেক্ষিক
তারপরে, আপনি যদি কেবল someprog
গিট সংগ্রহস্থল থেকে একটি স্ক্রিপ্ট ডাউনলোড করেছেন এবং এটি সিডব্লিউডি থেকে চালাতে চান তবে আপনি কখনই নিশ্চিত হতে পারবেন না যে এটিই আসল প্রোগ্রাম যা চলবে, কারণ আপনার ডিস্ট্রোতে এটি রয়েছে:
/bin/someprog
গত বছরের ক্রিসমাসের পরে বেশি পরিমাণে পান করার পরে আপনি ইনস্টল করা কিছু প্যাকেজ থেকে যা আপনার মধ্যে পাঠ।
অতএব, আবারও, আপনি কী চালাচ্ছেন তা জানতে আপনাকে সর্বদা পুরো পথ দিয়ে সিডাব্লুডির সাথে সম্পর্কিত স্থানীয় স্ক্রিপ্টগুলি চালিত করতে বাধ্য করা হবে:
"$(pwd)/someprog"
যা অত্যন্ত বিরক্তিকরও হবে।
আর একটি নিয়ম যা আপনাকে সামনে আসতে প্রলোভিত হতে পারে তা হ'ল:
আপেক্ষিক পাথগুলি কেবলমাত্র PATH, পরম পাথগুলি কেবল সিডাব্লুডি ব্যবহার করে
তবে আবার এটি ব্যবহারকারীদের সর্বদা প্যাথবিহীন স্ক্রিপ্টগুলির জন্য নিখুঁত পথগুলি ব্যবহার করতে বাধ্য করে "$(pwd)/someprog"
।
/
পথ অনুসন্ধান নিয়ম সমস্যা সম্পর্কে সমাধান মনে রাখা একটি সহজ দিচ্ছে:
- স্ল্যাশ: ব্যবহার করবেন না
PATH
- কোনও স্ল্যাশ নেই: কেবল ব্যবহার করুন
PATH
যা আপনি যা চালাচ্ছেন তা সর্বদা জেনে রাখা সহজ করে তোলে যে বর্তমান ডিরেক্টরিতে থাকা ফাইলগুলিকে ./somefile
বা হিসাবে হিসাবে প্রকাশ করা যেতে পারে somefile
এবং তাই এটি তাদের মধ্যে একটির বিশেষ অর্থ দেয়।
কখনও কখনও, কিছুটা বিরক্তিকর হয় যে আপনি some/prog
তুলনামূলকভাবে অনুসন্ধান করতে পারবেন না PATH
, তবে আমি এর কোনও স্যানার সমাধান দেখতে পাচ্ছি না।