আপনার মত একটি ক্যানোনিকাল পথ দেওয়া, এটি কাজ করবে:
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)
খুব দানাদার নয়, তাই সমাধানটিতে সাধারণত প্রতিটি পথের উপাদানগুলি পুনরাবৃত্তি করতে এবং পরীক্ষার জন্য কিছু লেখা থাকে ...