সমস্যাটি
কৌতূহলীভাবে গৃহীত উত্তর কেবল গুরুত্বপূর্ণ অবস্থার অধীনে কাজ করে। দেওয়া ...
/foo/bar/first.sh
:
function func1 {
echo "Hello $1"
}
এবং
/foo/bar/second.sh
:
#!/bin/bash
source ./first.sh
func1 World
এটি কেবল তখনই কাজ first.sh
করে first.sh
যদি অবস্থিত একই ডিরেক্টরিতে চালিত হয়। অর্থাৎ। যদি শেলের বর্তমান চলমান পথটি হয় /foo
তবে কমান্ড চালানোর চেষ্টা করা হবে
cd /foo
./bar/second.sh
মুদ্রণের ত্রুটি:
/foo/bar/second.sh: line 4: func1: command not found
এটি কারণ source ./first.sh
স্ক্রিপ্টের পথে নয়, বর্তমানের চলমান পথের সাথে সম্পর্কিত। সুতরাং একটি সমাধান সাবসেল ব্যবহার করে চালানো হতে পারে
(cd /foo/bar; ./second.sh)
আরও জেনেরিক সমাধান
দেওয়া ...
/foo/bar/first.sh
:
function func1 {
echo "Hello $1"
}
এবং
/foo/bar/second.sh
:
#!/bin/bash
source $(dirname "$0")/first.sh
func1 World
তারপর
cd /foo
./bar/second.sh
প্রিন্ট
Hello World
কিভাবে এটা কাজ করে
$0
সম্পাদিত স্ক্রিপ্টে আপেক্ষিক বা নিখুঁত পাথ প্রদান করে
dirname
ডিরেক্টরিতে আপেক্ষিক পাথ ফেরায়, যেখানে $ 0 স্ক্রিপ্ট বিদ্যমান
$( dirname "$0" )
dirname "$0"
কমান্ড মৃত্যুদন্ড কার্যকর স্ক্রিপ্ট, যা পরে জন্য যুক্তি হিসেবে ব্যবহার করা হয় নির্দেশিকা আপেক্ষিক পাথ ফেরৎ source
কমান্ড
- "সেকেন্ড.শ" এ,
/first.sh
কেবল আমদানি করা শেল স্ক্রিপ্টের নাম করা হয়
source
নির্দিষ্ট শেলটিতে নির্দিষ্ট ফাইলের সামগ্রী লোড করে