आपके जैसे एक विहित पथनामे को देखते हुए, यह काम करेगा:
set -f --; IFS=/
for p in $pathname
do [ -e "$*/$p" ] || break
set -- "$@" "$p"
done; printf %s\\n "$*"
कि अंतिम पूरी तरह से मौजूदा / सुलभ घटक के माध्यम से प्रिंट करता है $pathname, और उन में से प्रत्येक को अलग से आर्ग सरणी में डालता है। पहले कोई नहीं घटक मुद्रित नहीं है, लेकिन यह में सहेजा गया है $p।
आप इसका विरोध कर सकते हैं:
until cd -- "$path" && cd -
do case $path in
(*[!/]/*)
path="${path%/*}"
;; (*) ! break
esac
done 2>/dev/null && cd -
जो या तो उचित $pathरूप से वापस आ जाएगा या आवश्यकतानुसार नीचे गिर जाएगा । यह करने के लिए एक परिवर्तन का प्रयास करने के लिए गिरावट आती है /, लेकिन अगर सफल अपने वर्तमान काम कर रहे निर्देशिका और निर्देशिका के लिए दोनों को मुद्रित करेगा, जो इसे बदल जाता है। आपका करंट $PWDभी लगा दिया जाएगा $OLDPWD।
access(2)बहुत दानेदार नहीं है, इसलिए समाधान में आमतौर पर प्रत्येक पथ तत्व को पुनरावृति और परीक्षण करने के लिए कुछ लिखना शामिल है ...