Envsubst দিয়ে কেবলমাত্র নির্দিষ্ট ভেরিয়েবলগুলি প্রতিস্থাপন


53

আমি এর মাধ্যমে পরিবেশের পরিবর্তনশীল প্রতিস্থাপন সম্পাদন করার চেষ্টা করছি envsubst, তবে আমি কেবলমাত্র নির্দিষ্ট ভেরিয়েবলগুলি প্রতিস্থাপন করতে চাই।

দস্তাবেজগুলি থেকে আমার envsubstকেবলমাত্র কিছু নির্দিষ্ট ভেরিয়েবলগুলি প্রতিস্থাপন করতে বলা উচিত তবে আমি এটি করতে সক্ষম হচ্ছি।

উদাহরণস্বরূপ, আমার যদি একটি ফাইল থাকে তবে:

VAR_1=${VAR_1}
VAR_2=${VAR_2}

আমার কীভাবে কার্যকর করা উচিত envsubstযাতে এটি কেবলমাত্র রেফারেন্সটি প্রতিস্থাপন করে ${VAR_1}?

উত্তর:


4

কল করার আগে envsubstআপনাকে পুনরায় VAR_1সংশোধন করতে একক উদ্ধৃতি ব্যবহার করে রফতানি ব্যবহার করা উচিত । হিসাবে:

export VAR_1='somevalue'

আরও তথ্যের জন্য, দয়া করে দেখুন:

জটিল পাঠ্য ফাইলগুলিতে শেল ভেরিয়েবল কীভাবে প্রতিস্থাপন করবেন


16
সঠিক উত্তর নীচে
ক্রেগ

130

ম্যান পেজ প্রতি:

envsubst [OPTION] [SHELL-FORMAT]

যদি শেল-ফর্ম্যাট দেওয়া হয়, কেবল শেল-ফরমেটে রেফারেন্সযুক্ত সেই সমস্ত পরিবেশের ভেরিয়েবলগুলি প্রতিস্থাপন করা হবে; অন্যথায় স্ট্যান্ডার্ড ইনপুটটিতে ঘটে যাওয়া সমস্ত পরিবেশের ভেরিয়েবলের উল্লেখগুলি প্রতিস্থাপন করা হয়।

যেখানে শেল-ফরমেট স্ট্রিংগুলি "ফর্মের শেল ভেরিয়েবলের রেফারেন্স সহ স্ট্রিং $variableবা ${variable}[...] ভেরিয়েবলের নামগুলি কেবলমাত্র বর্ণমালার বা আন্ডারস্কোর ASCII অক্ষর দ্বারা গঠিত হওয়া উচিত, একটি অঙ্কের সাথে শুরু হওয়া উচিত নয় এবং অবিচ্ছিন্ন হওয়া উচিত; অন্যথায় এ জাতীয় পরিবর্তনশীল রেফারেন্স হ'ল উপেক্ষিত। "
সুতরাং, একটিকে envsubstশেল ফরম্যাট স্ট্রিংয়ে স্বতন্ত্র ভেরিয়েবলের নামগুলি পাস করতে হবে (স্পষ্টতই, তাদের এড়ানোর প্রয়োজন / উদ্ধৃত করা দরকার যাতে আক্ষরিকভাবে পাস করা যেতে পারে envsubst)। উদাহরণ:

ইনপুট ফাইল যেমন infile:

VAR1=${VAR1}
VAR2=${VAR2}
VAR3=${VAR3}

এবং কিছু মান পছন্দ

export  VAR1="one" VAR2="two" VAR3="three"

তারপর চলছে

envsubst '${VAR1} ${VAR3}' <infile

অথবা

envsubst '${VAR1},${VAR3}' <infile

অথবা

envsubst '${VAR1}
${VAR3}' <infile

আউটপুট

VAR1=one
VAR2=${VAR2}
VAR3=three

বা, আপনি যদি ব্যাকস্ল্যাশ পছন্দ করেন:

envsubst \$VAR1,\$VAR2 <infile

উত্পাদন করে

VAR1=one
VAR2=two
VAR3=${VAR3}

13
কেন এটি গৃহীত উত্তর নয়?
Qsiris

3
হ্যাঁ এটাই সঠিক উত্তর!
টমাস ডিকোক্স

3
যদি আপনি পরিবর্তিত হতে পারে এমন ভেরিয়েবলগুলি সীমাবদ্ধ করতে ব্যবহার করতে একটি পরিবর্তনশীল উপসর্গটি জানেন:envsubst "$(printf '${%s} ' ${!PREFIX*})" < infile
স্যাম লিডিকোট

বা যদি আপনার SUBST_VARSতখন তাদের একটি তালিকা থাকে :envsubst "$(printf '${%s} ' $SUBST_VARS)" < infile
স্যাম লিডিকোট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.