যখন আমি একটি স্ক্রিপ্ট চালানোর চেষ্টা করি যেখানে এনভসুবস্ট কমান্ডটি থাকে তখন আমি এই ত্রুটিটি পাই। অনলাইনে সন্ধান করা, এটি একটি স্ট্যান্ডার্ড বাশ কমান্ড বলে মনে হচ্ছে, তাই এটি কাজ করার জন্য কী ইনস্টল করবেন তা আমি নিশ্চিত নই।
যখন আমি একটি স্ক্রিপ্ট চালানোর চেষ্টা করি যেখানে এনভসুবস্ট কমান্ডটি থাকে তখন আমি এই ত্রুটিটি পাই। অনলাইনে সন্ধান করা, এটি একটি স্ট্যান্ডার্ড বাশ কমান্ড বলে মনে হচ্ছে, তাই এটি কাজ করার জন্য কী ইনস্টল করবেন তা আমি নিশ্চিত নই।
উত্তর:
সম্পাদনা করুন: @ কোবারবয়ের অ্যাওয়ার আরও সঠিক more তাকে উত্সাহিত করুন।
brew install gettext
brew link --force gettext
নিম্নলিখিতটি আমার পুরানো উত্তর:
envsubst
gettext
প্যাকেজ অন্তর্ভুক্ত করা হয় ।
অতএব আপনি স্ট্যান্ডার্ড বিল্ড সরঞ্জাম যেমন make
ব্যবহার বা ব্যবহার করে এটি নিজের দ্বারা সংকলন করতে পারেন homebrew
।
তবে gettext
ম্যাকওএসে ইনস্টল করার সময় এটি খুব কম সমস্যা বলে মনে হচ্ছে । বিশদগুলির জন্য নিম্নলিখিত url দেখুন: ম্যাকস এক্স এ গেটটেক্সট কীভাবে ইনস্টল করবেন
envsubst
গেটেক্সটেক্সের অংশ (যেমন হোমব্রিউ দ্বারা ইনস্টল করা হয়েছে) এটি ডিফল্টরূপে লিঙ্কযুক্ত নয়। আমি এটি প্রত্যাশা করি কারণ গেটেক্সটেক্সটি কেবল একটি কেবল-র সূত্র। আপনি হোমগ্রাবকে কেজটি লিঙ্ক করতে বলতে পারেন, তবে এতে অনিচ্ছাকৃত পার্শ্ব-প্রতিক্রিয়া থাকতে পারে। alias envsubst='/usr/local/Cellar/gettext/0.19.6/bin/envsubst'
আপনার .profile
(বা সমমানের) সাথে যুক্ত করে একটি উপনাম সেটআপ করা হ'ল কম অনুপ্রেরণীয় পন্থা । অবশ্যই, আপনার গেটেক্সটেক্সের আরও একটি সংস্করণ ইনস্টল থাকতে পারে। দৌড়ে আপনি এটি সম্পর্কে শিখতে পারেন brew info gettext
।
/usr/local/opt/gettext/bin/envsubst
যা আপগ্রেডগুলিতে বেঁচে থাকবে
brew install gettext
brew link --force gettext
এটি ওএস এক্স-তে এনভসবস্টকে সক্ষম করবে এবং এটিকে সঠিকভাবে লিঙ্ক করতে বাধ্য করবে। এটি হোমব্রু ইনস্টল করা প্রয়োজন।
Linking /usr/local/Cellar/gettext/0.19.8.1... 194 symlinks created
... wtf 194 টি symlinks?
gettext
অন্তর্ভুক্ত করেছে; মনে হচ্ছে কেবল envsubst
ইনস্টল করা ওভারকিলের মতো তবে এটি দ্রুত এবং সহজতম উপায়।
সম্ভাব্য বিভ্রান্তি দূর করতে:
envsubst
একটি বাহ্যিক সম্পাদনযোগ্য এবং এটি বাশের অংশ নয় ; বাহ্যিক এক্সিকিউটেবলগুলি প্ল্যাটফর্ম-নির্ভর , উভয় ক্ষেত্রে যা তাদের জন্য উপলব্ধ রয়েছে সেই সাথে তাদের নির্দিষ্ট আচরণ এবং তারা যে সুনির্দিষ্ট বিকল্পগুলি সমর্থন করে তাদের উভয় ক্ষেত্রেই (যদিও আশা করি, পসিক্সের নির্দিষ্টকরণের ভিত্তিতে একটি সাধারণ উপসেট রয়েছে)bash
বলা হয় builtins , এবং শুধুমাত্র তারা উপর নির্ভরশীল করা যেতে পারে উপস্থিত হতে সব প্ল্যাটফর্মের ।প্রদত্ত কমান্ডটি অন্তর্নির্মিত কিনা তা পরীক্ষা করতে , ব্যবহার করুন
type <cmdName>
হাতের ক্ষেত্রে, type envsubst
ম্যাকোস 10.13 রিটার্নে চলছে -bash: type: envsubst: not found
, যা থেকে আপনি অনুমান করতে পারেন:
envsubst
একটি অন্তর্নির্মিত নাenvsubst
আপনার সিস্টেমের মধ্যে নেই $PATH
(এবং সম্ভবত এটি সম্ভবত আপনার সিস্টেমে উপস্থিত হবে না)(বিপরীতে, একই কমান্ড চালু করে, উদাহরণস্বরূপ, একটি উবুন্টু 12.04 সিস্টেম ফিরে আসে envsubst is hashed (/usr/bin/envsubst)
, যা আপনাকে জানায় যে ইউটিলিটিটি উপস্থিত এবং এটি কোথায় রয়েছে))
এর জন্য একটি অস্থায়ী বিকল্প envsubst
ব্যবহার করা হয় eval
, যদিও সাধারণ ক্যাভ্যাট প্রযোজ্য: eval
কেবল তার স্ট্রিংগুলিতে ব্যবহার করুন যার বিষয়বস্তু আপনি নিয়ন্ত্রণ করেন বা বিশ্বাস করেন:
sample.txt
অব্যবহৃত ভেরিয়েবল রেফারেন্স সহ একটি ফাইল পাঠ্য হিসাবে ধরে নিন ; যেমন:
cat > sample.txt <<'EOF'
Honey, I'm $USER
and I'm $HOME.
EOF
সমতুল্য:
envsubst < sample.txt
হ'ল:
eval "echo \"$(sed 's/"/\\"/g' sample.txt)\""
একটি গুরুত্বপূর্ণ পার্থক্য আছে , তবে:
envsubst
শুধুমাত্র পরিবেশের পরিবর্তনশীল উল্লেখগুলি প্রসারিত করেeval
প্রসারিত হবে শেল পরিবর্তনশীল রেফারেন্স খুব সেইসাথে - এমবেডেড কমান্ড বদল , যা কি ব্যবহার করে eval
একটি নিরাপত্তা উদ্বেগ।eval echo
কারণ আমি envsubst < .env.example
eval echo < .env.example
আমি এটি এখন আমার বাশ স্ক্রিপ্টে ব্যবহার করছি যার জন্য এনভ্যুবসবস্ট প্রয়োজন:
if ! which envsubst > /dev/null 2>&1; then
envsubst() {
while read line; do
line=$( echo $line | sed 's/"/\\"/g' )
eval echo $line
done
}
fi
আপনি এটি এনভাসবস্ট কমান্ড হিসাবে ব্যবহার করতে পারেন - অবশ্যই এটি বৈশিষ্ট্য সম্পূর্ণ বা অন্য কিছু নয়:
envsubst <<<'Honey, I am $HOME.'
envsubst < input > output 2> corrupt
"
প্রায় $ লাইন যুক্ত করার চেষ্টা করতে পারেন তবে আমি এটি এখনও চেষ্টা করি নি
envsubst
gettext
প্যাকেজ অন্তর্ভুক্ত করা হয় । আপনি নিজের দ্বারা সংকলন করতে পারেন। দেখতে stackoverflow.com/questions/14940383/...