PATHশেল স্ক্রিপ্টটি ব্যবহার করে আমাকে একটি প্রদত্ত প্রোগ্রামের পথটি সন্ধান করতে হবে । পাথটি অবশ্যই প্রোগ্রামটির আসল পূর্ণ পাথ হতে হবে, যা পরবর্তীতে exec*কোনও একটি ফাংশনে যেতে পারে , যা PATHনিজে অনুসন্ধান করে না , যেমন execv।
এখানে এমন প্রোগ্রাম রয়েছে killযা প্রকৃত প্রোগ্রাম এবং একই সাথে বিল্ট-ইন শেল হিসাবে উপলব্ধ। যদি এটি হয় তবে আমার আসল প্রোগ্রামটির পুরো পথ প্রয়োজন।
বেশ কয়েকটি ইউটিলিটি রয়েছে যেটি পজিক্স স্ট্যান্ডার্ডের কমান্ড সন্ধান এবং এক্সিকিউশন বিভাগ 2.9.1.1.1 অনুযায়ীPATH উল্লিখিতভাবে একটি প্রোগ্রাম সন্ধান করতে পারে ।
আছে which, যা কোনও মান অংশ নয়। এটি কিছু সিস্টেমে নিয়মিত প্রোগ্রাম হতে পারে, কিছু শাঁস এটি একটি অন্তর্নির্মিত সরবরাহ করে। এটি বেশিরভাগ সিস্টেমে এবং শেলগুলিতে উপলব্ধ বলে মনে হয় তবে বিল্টিন সংস্করণ সহ শেলগুলি কার্যনির্বাহী পথটির পরিবর্তে বিল্ট-ইনটির নাম দেয়। এছাড়াও এটি কোনওভাবেই মানসম্মত নয় এবং কোনও আউটপুট ফিরে আসতে পারে এবং বিভিন্ন বিকল্প গ্রহণ করতে পারে।
bash# which kill
/usr/bin/kill
dash# which kill
/usr/bin/kill
fish# which kill
/usr/bin/kill
mksh# which kill
/usr/bin/kill
tcsh# which kill
kill: shell built-in command.
zsh# which kill
kill: shell built-in command
এটি রয়েছে whenceযা কয়েকটি শেলের অন্তর্নির্মিত। তবে অনেক গুলিতে পাওয়া যায় না। এটি প্রোগ্রামে যাওয়ার পরিবর্তে বিল্ট-ইনটির নামটি ফিরিয়ে দেবে। একটি -pকোথা এই আচরণ পরিবর্তন করার জন্য প্রেরণ করা হতে পারে।
bash# whence kill
bash: whence: command not found
dash# whence kill
dash: 1: whence: not found
fish# whence kill
fish: Unknown command 'whence'
mksh# whence kill
kill
mksh# whence -p kill
/usr/bin/kill
tcsh# whence kill
whence: Command not found.
zsh# whence kill
kill
zsh# whence -p kill
/usr/bin/kill
এখানে commandপসিএক্স: ২০০৮ দ্বারা নির্মিত বিল্টিন রয়েছে । দুর্ভাগ্যক্রমে এটি নিয়মিত কমান্ড এবং বিল্ট-ইনগুলি অনুসন্ধান করে এবং একই নামের একটি অন্তর্নির্মিত ছায়া গোছানো প্রোগ্রামটির পাথের পরিবর্তে বিল্ট-ইনটির নাম ফিরিয়ে দেবে। কিছু পুরানো শেল এটি এখনও কার্যকর করেনি।
bash# command -v kill
kill
dash# command -v kill
kill
fish# command -v kill
/usr/bin/kill
mksh# command -v kill
kill
tcsh# command -v kill
command: Command not found.
zsh# command -v kill
kill
realpath
enableকেবলমাত্র bashএবং সরবরাহ করেছেনzsh
type -p। ব্যাশ এবং ড্যাশ উভয়ই আপনাকে commandএকই নামে কোনও ফাংশন বা বিল্টিন থাকা সত্ত্বেও প্রকৃত নির্বাহযোগ্য চালনার জন্য কমান্ড বলতে দেয় ।
commandফাংশনগুলি এড়িয়ে যায় (এবং উপাধি) তবে বিল্টইনস নয়, যেমন প্রশ্নটি সঠিকভাবে বলেছে। এবং আপনি সর্বদা একটি শেবাং ব্যবহার করতে পারবেন না কারণ সমস্ত সিস্টেমে কোনও শেল, এমনকি কিছু পসিক্স শেল পাওয়া যায় এমন কোনও পাথ নেই।
enableপসিক্সে নির্দিষ্ট করা আছে কিনা তা আমি বুঝতে পারি না তবে এটি যদি হয় তবে আপনিenable -n whichবিল্ট-ইন শেলটি অক্ষম করতে ব্যবহার করতে পারেনwhich।