এখানে একটি ফাংশন যা ডিরেক্টরিগুলির বিষয়বস্তু তালিকাভুক্ত করে $PATH
। যদি আর্গুমেন্টগুলি পাস করা হয় তবে ফাংশনটি কেবলমাত্র সেই আদেশগুলি তালিকাভুক্ত করে যার নাম আর্গুমেন্টগুলির মধ্যে একটির সাথে যুক্ত। যুক্তিগুলি গ্লোব নিদর্শন হিসাবে ব্যাখ্যা করা হয়।
shopt -s extglob
lspath () {
local IFS pattern
IFS='|'
pattern="*@($*)*"
IFS=':'
for d in $PATH; do
for x in "$d/"$pattern; do
[ "$x" = "$d/$pattern" ] || echo "${x##*/}"
done
done | sort -u
}
অনেক কিছুর মতো, zsh এ এটি সহজ।
lspath () {
(($#)) || set ''
print -lr -- $^path/*$^@*(N:t) | sort -u
}
^
চরিত্রের প্যারামিটার সম্প্রসারণ টেক্সট অ্যারের সঙ্গে ঘনিভূত প্রতিটি অ্যারের উপাদান, যেমন যোগ করা কারণ path=(/bin /usr/bin); echo $^path/foo
কপি করে প্রিন্ট /bin/foo /usr/bin/foo
।
/*$^@*
একটি কমিক বইয়ের অপমানের মতো দেখায় তবে এটি সাধারণ চরিত্র /
, ওয়াইল্ডকার্ড *
, বিশেষ পরামিতি $@
(অবস্থানের প্যারামিটারের অ্যারে) ^
সংশোধক সহ এবং আবার *
।
(N:t)
হয় উল্লিখিত glob কোয়ালিফায়ার N
যদি কোনো মিল দ্বারা অনুসরণ একটি খালি সম্প্রসারণ পেতে ইতিহাস পরিবর্তক t
প্রতিটি ম্যাচের শুধুমাত্র basename ( "লেজ") রাখা।
আরও ক্রিপ্টিক, বাহ্যিক কল এড়ায় তবে এটি কেবল প্রসাধনী আগ্রহের বিষয়:
lspath () {
(($#)) || set ''
local names; names=($^path/*$^@*(N:t))
print -lr -- ${(ou)names}
}
আপনি সম্ভবত apropos
কমান্ডটি সন্ধান করছেন, যা কমান্ডের ম্যান পেজগুলি অনুসন্ধান করে যার সংক্ষিপ্ত বিবরণটিতে একটি কীওয়ার্ড রয়েছে। একটি সীমাবদ্ধতা হ'ল এটি কেবল সেই আদেশগুলি সন্ধান করে যা ম্যান পৃষ্ঠা রয়েছে।
ls -la
?