dirnameকমান্ড সবচেয়ে মৌলিক, সহজভাবে দেখা বন্ধ ফাইলের নাম পর্যন্ত পথ পার্স হয় $0(স্ক্রিপ্ট নাম) পরিবর্তনশীল:
dirname "$0"
তবে, যেমন ম্যাট বি দেখিয়েছে, স্ক্রিপ্টটি কীভাবে ডাকা হবে তার উপর নির্ভর করে ফিরে আসা পথটি পৃথক। pwdকাজটি করে না কারণ এটি আপনাকে কেবল বর্তমান ডিরেক্টরিটি কী তা বলে দেয়, স্ক্রিপ্টটি কোন ডিরেক্টরিতে থাকে তা নয় Additionally অতিরিক্তভাবে, যদি কোনও স্ক্রিপ্টের প্রতীকী লিঙ্কটি কার্যকর করা হয়, আপনি একটি (সম্ভবত আপেক্ষিক) পথ পেতে যাচ্ছেন যেখানে লিঙ্কটি থাকে, প্রকৃত স্ক্রিপ্টটি নয়।
অন্য কেউ readlinkকমান্ডটি উল্লেখ করেছেন , তবে এর সহজতম পদ্ধতিতে আপনি ব্যবহার করতে পারেন:
dirname "$(readlink -f "$0")"
readlinkস্ক্রিপ্ট পাথ ফাইল সিস্টেমের মূল থেকে এক নিখুঁত পাথের সমাধান করবে। সুতরাং, একক বা ডাবল ডটস, টিল্ডস এবং / অথবা প্রতীকী লিঙ্কগুলি সহ যে কোনও পাথ একটি সম্পূর্ণ পাথে সমাধান করা হবে।
এইগুলির প্রতিটি প্রদর্শন করে এখানে একটি স্ক্রিপ্ট রয়েছে whatdir.sh:
#!/bin/bash
echo "pwd: `pwd`"
echo "\$0: $0"
echo "basename: `basename $0`"
echo "dirname: `dirname $0`"
echo "dirname/readlink: $(dirname $(readlink -f $0))"
আপেক্ষিক পথটি ব্যবহার করে আমার স্কুলে এই স্ক্রিপ্টটি চালাচ্ছেন:
>>>$ ./whatdir.sh
pwd: /Users/phatblat
$0: ./whatdir.sh
basename: whatdir.sh
dirname: .
dirname/readlink: /Users/phatblat
আবার, তবে স্ক্রিপ্টের পুরো পথটি ব্যবহার করছে:
>>>$ /Users/phatblat/whatdir.sh
pwd: /Users/phatblat
$0: /Users/phatblat/whatdir.sh
basename: whatdir.sh
dirname: /Users/phatblat
dirname/readlink: /Users/phatblat
এখন ডিরেক্টরি পরিবর্তন হচ্ছে:
>>>$ cd /tmp
>>>$ ~/whatdir.sh
pwd: /tmp
$0: /Users/phatblat/whatdir.sh
basename: whatdir.sh
dirname: /Users/phatblat
dirname/readlink: /Users/phatblat
এবং অবশেষে স্ক্রিপ্টটি কার্যকর করতে একটি প্রতীকী লিঙ্ক ব্যবহার করে:
>>>$ ln -s ~/whatdir.sh whatdirlink.sh
>>>$ ./whatdirlink.sh
pwd: /tmp
$0: ./whatdirlink.sh
basename: whatdirlink.sh
dirname: .
dirname/readlink: /Users/phatblat
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd && echo x)"- এবং কমান্ড প্রতিস্থাপন ছাড়াই এটি সরিয়ে ফেলতে পারেন -DIR="${DIR%x}"।