সঞ্চালিত স্ক্রিপ্ট সম্পর্কিত একটি ফাইল উল্লেখ


97

আমি লিখছি এমন ব্যাশ স্ক্রিপ্টে, আমি sourceএকটি কনফিগারেশন ফাইলে সংজ্ঞায়িত ভেরিয়েবল অন্তর্ভুক্ত করতে ব্যবহার করি । সম্পাদিত act.shহওয়া স্ক্রিপ্টটি হ'ল , যখন স্ক্রিপ্টটি sourceডি করা হবে act.conf.sh, সুতরাং act.shআমার মধ্যে :

source act.conf.sh

তবে এটি কেবলমাত্র act.shএটি অন্তর্ভুক্ত ডিরেক্টরিটিতে চালিত হলে কাজ করে, যেহেতু act.conf.shকার্যকরী ডিরেক্টরিতে অন্তর্ভুক্ত করা ফাইলটিকে বোঝায়। কোনও অনুরোধ না করেই এটি সম্পাদনকারী স্ক্রিপ্টের সাথে সম্পর্কিত ফাইলটিকে রেফার করার কোনও সমাধান আছে কি cd? ধন্যবাদ

উত্তর:


121

দেখুন: বেস FAQ এন্ট্রি # 28: "আমি আমার স্ক্রিপ্টের অবস্থান কীভাবে নির্ধারণ করব? আমি একই জায়গা থেকে কিছু কনফিগার ফাইল পড়তে চাই।"

কোনও সমাধান সময়ের 100% কাজ করে না:

এটি উপলব্ধি করা গুরুত্বপূর্ণ যে সাধারণ ক্ষেত্রে, এই সমস্যার কোনও সমাধান নেই। আপনি যে কোনও পদ্ধতির কথা শুনে থাকতে পারেন, এবং নীচে বিস্তারিতভাবে জানানো যে কোনও পদ্ধতির ত্রুটি রয়েছে এবং এটি কেবলমাত্র নির্দিষ্ট ক্ষেত্রে কাজ করবে। প্রথম এবং সর্বাগ্রে, আপনার স্ক্রিপ্টের অবস্থানের উপর নির্ভর করে সমস্যাটি পুরোপুরি এড়াতে চেষ্টা করুন!

আপনার যদি খুব পুনঃব্যবহারযোগ্য সরঞ্জাম লেখার প্রয়োজন হয় তবে আপনার স্ক্রিপ্টে প্যারামিটার হিসাবে সঠিক পথটি নেওয়া সবচেয়ে নির্ভরযোগ্য পদ্ধতি হতে চলেছে

ধরে নিচ্ছি আপনার স্ক্রিপ্টটি কেবলমাত্র কয়েকটি শাঁস থেকে চালানো হবে এবং কেবলমাত্র কিছুটা নমনীয়তার প্রয়োজনে আপনি সম্ভবত এই বিড়বিড়তা থেকে কিছুটা শিথিল করতে পারেন। আপনার বিকল্পগুলি দেখতে এখনও ভাল। এমন সাধারণ প্যাটার্ন রয়েছে যা লোকে বিশেষত সমস্যাযুক্ত বলে ব্যবহার করে।

বিশেষত, এফএকিউ খুব সাধারণভাবে ব্যবহৃত $0ভেরিয়েবল এড়ানো পরামর্শ দেয় :

যেটি পড়া যায় $0তা কখনই বুলেটপ্রুফ হবে না, কারণ $0নিজেই অবিশ্বস্ত।

বিকল্প হিসাবে, আপনি $BASH_SOURCEপরিবর্তে ব্যবহার করতে পারেন । এটার মতো কিছু:

source "${BASH_SOURCE%/*}/act.conf.sh"

এই সমাধানের জন্য কিছু সতর্কতাও রয়েছে। বিভিন্ন সমাধানের মধ্যে ট্রেড-অফগুলি দেখতে FAQ পৃষ্ঠাটি দেখুন। তারা মনে হয় যে এটি আপনার ক্ষেত্রে কার্যকর হবে সেই ক্ষেত্রে এটির cdসাথে সংমিশ্রণের প্রস্তাব দেয় $BASH_SOURCEকারণ আপনি যখন একটি কার্যকর ত্রুটি শর্তটি সঠিকভাবে প্রসারিত করতে ব্যর্থ হন তখন এটি পাবেন।


4
ধন্যবাদ, আমি ব্যবহার করব readlink। প্রশ্নটি এখানে পোস্ট করার জন্য অনুসন্ধানের জন্য কীওয়ার্ডগুলি নির্ধারণ করতে সক্ষম ছিল না ....
রায়ান লি

9
বাশ ফ্যাক্স নিচে নামার ক্ষেত্রে কী আপনি প্রাসঙ্গিক তথ্যটি উত্তরের দিকে টানতে পারেন?
মের্লিন মরগান-গ্রাহাম

4
লিঙ্কটি সুপারিশ করে: cd "${BASH_SOURCE%/*}" || exitবা read somevar < "${BASH_SOURCE%/*}/etc/somefile", লিঙ্কটি দৃr়ভাবে নিরুৎসাহিত করে $0 "$ 0 পড়ার কিছুই কখনও বুলেটপ্রুফ হবে না, কারণ $ 0 নিজেই অবিশ্বস্ত।"
থারস্মমনার

10
BASH_SOURCE এর পরে% / * কী করবে এবং কীভাবে?
সিলিকোমেন্সার


34

এটি দেখুন: বাশ: কীভাবে সেরা_ অন্যান্য স্ক্রিপ্টগুলি অন্তর্ভুক্ত করবেন?

আমি ব্যবহার করার পরামর্শ দিচ্ছি:

source $(dirname $0)/act.conf.sh

8
আপনি যে উত্তরটি চেয়েছেন এটি এটি নয়। $0অন্তর্নিহিত বগি হয়। দেখুন উপরের ভোট এবং কেন, অথবা কেবল পড়া জন্য গৃহীত উত্তর mywiki.wooledge.org/BashFAQ/028 - প্রশ্নের জন্য সংক্ষিপ্ত কার্যসংক্রান্ত জিজ্ঞাসা মত কিছুsource "${BASH_SOURCE%/*}/act.conf.sh"
Merlyn মর্গান-গ্রাহাম


1

আমি সাধারণত, আমার স্ক্রিপ্টগুলির উপরে এটি যুক্ত করি।

cd $(dirname $BASH_SOURCE)

তারপরে, পরবর্তী সমস্ত কোড script স্ক্রিপ্টের পথের তুলনায় কার্যকর করা হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.