সমস্যাটি
কৌতূহলীভাবে গৃহীত উত্তর কেবল গুরুত্বপূর্ণ অবস্থার অধীনে কাজ করে। দেওয়া ...
/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 নির্দিষ্ট শেলটিতে নির্দিষ্ট ফাইলের সামগ্রী লোড করে