आपके जैसे एक विहित पथनामे को देखते हुए, यह काम करेगा:
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)
बहुत दानेदार नहीं है, इसलिए समाधान में आमतौर पर प्रत्येक पथ तत्व को पुनरावृति और परीक्षण करने के लिए कुछ लिखना शामिल है ...