यहां एक फ़ंक्शन है जो निर्देशिकाओं की सामग्री को सूचीबद्ध करता है $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
}
^
में चरित्र पैरामीटर विस्तार पाठ सरणी साथ concatenated प्रत्येक सरणी तत्व, जैसे के लिए जोड़ा जा करने के लिए कारण बनता है path=(/bin /usr/bin); echo $^path/foo
प्रिंट /bin/foo /usr/bin/foo
।
/*$^@*
एक कॉमिक बुक अपमान की तरह लगता है, लेकिन वास्तव में साधारण चरित्र /
, वाइल्डकार्ड *
, विशेष पैरामीटर $@
(स्थितीय पैरामीटर का सरणी) ^
संशोधक के साथ , और फिर से है *
। प्रत्येक मैच का केवल आधार ("पूंछ") रखने के लिए इतिहास संशोधक के बाद कोई मैच नहीं होने पर खाली विस्तार पाने के
(N:t)
लिए ग्लोब क्वालिफायर N
है । t
अधिक गुप्त, बाहरी कॉल से बचता है, लेकिन यह केवल कॉस्मेटिक रुचि है:
lspath () {
(($#)) || set ''
local names; names=($^path/*$^@*(N:t))
print -lr -- ${(ou)names}
}
आप वास्तव में apropos
कमांड की तलाश में हो सकते हैं , जो उन कमांड पेजों को खोजता है जिनके संक्षिप्त विवरण में एक कीवर्ड होता है। एक सीमा यह है कि यह केवल उन कमांड्स को खोजता है जिनमें एक मैन पेज है।
ls -la
?