নিম্নলিখিত সাধারণ ওয়ান-লাইনার ব্যবহার করে দেখুন:
সমস্ত ইউনিক্স / ওএসএক্স / লিনাক্সের জন্য
dir=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
সজোরে আঘাত
dir=$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)
দ্রষ্টব্য: একটি ডাবল ড্যাশ (-) কমান্ড বিকল্পের সমাপ্তি বোঝাতে ব্যবহৃত হয়, সুতরাং ড্যাশগুলি বা অন্যান্য বিশেষ অক্ষরযুক্ত ফাইলগুলি কমান্ডটি ভাঙ্গবে না।
দ্রষ্টব্য: বাশের ${BASH_SOURCE[0]}
পক্ষে , ব্যবহার করুন $0
, অন্যথায় পথটি ( source
/ .
) উত্সাহ দেওয়ার সময় ভাঙতে পারে ।
লিনাক্স, ম্যাক এবং অন্যান্য * বিএসডি এর জন্য:
cd "$(dirname "$(realpath "$0")")";
দ্রষ্টব্য: realpath
ডিফল্টরূপে (উবুন্টুর মতো) সর্বাধিক জনপ্রিয় লিনাক্স বিতরণে ইনস্টল করা উচিত তবে কিছু ক্ষেত্রে এটি অনুপস্থিত হতে পারে, তাই আপনাকে এটি ইনস্টল করতে হবে।
দ্রষ্টব্য: আপনি যদি ব্যাশ ব্যবহার ${BASH_SOURCE[0]}
করছেন তবে তার পক্ষে ব্যবহার করুন $0
, অন্যথায় পথটি ( source
/ .
) স্রোস করার সময় ভেঙে যেতে পারে ।
অন্যথায় আপনি এরকম কিছু চেষ্টা করতে পারেন (এটি প্রথম বিদ্যমান সরঞ্জামটি ব্যবহার করবে):
cd "$(dirname "$(readlink -f "$0" || realpath "$0")")"
লিনাক্স নির্দিষ্ট জন্য:
cd "$(dirname "$(readlink -f "$0")")"
* বিএসডি / ম্যাকের উপর জিএনইউ রিডলিঙ্ক ব্যবহার:
cd "$(dirname "$(greadlink -f "$0")")"
দ্রষ্টব্য: আপনার coreutils
ইনস্টল থাকা দরকার (যেমন 1. হোমব্রিউ ইনস্টল করুন , ২ brew install coreutils
)।
ব্যাশে
বাশে আপনি এটি অর্জনের জন্য প্যারামিটার বিস্তৃতি ব্যবহার করতে পারেন , যেমন:
cd "${0%/*}"
তবে স্ক্রিপ্ট একই ডিরেক্টরি থেকে চালিত হলে এটি কাজ করে না।
বিকল্পভাবে আপনি নিম্নলিখিত ফাংশনটিকে ব্যাশে সংজ্ঞায়িত করতে পারেন:
realpath () {
[[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}"
}
এই ফাংশনটি 1 টি যুক্তি লাগে। যদি যুক্তিটির ইতিমধ্যে পরম পাথ থাকে, তবে এটি ঠিক একইভাবে মুদ্রণ করুন, অন্যথায় $PWD
ভেরিয়েবল + ফাইলনাম যুক্তি ( ./
উপসর্গ ব্যতীত) মুদ্রণ করুন ।
বা এখানে ডেবিয়ান .bashrc
ফাইল থেকে নেওয়া সংস্করণটি রয়েছে :
function realpath()
{
f=$@
if [ -d "$f" ]; then
base=""
dir="$f"
else
base="/$(basename "$f")"
dir=$(dirname "$f")
fi
dir=$(cd "$dir" && /bin/pwd)
echo "$dir$base"
}
সম্পর্কিত:
আরো দেখুন:
আমি কীভাবে ম্যাকের সাথে জিএনইউ'র রিডলিংক-এর আচরণ পেতে পারি?