जब मैं एक स्क्रिप्ट चलाने की कोशिश करता हूं जिसमें एन्वाबस्ट कमांड होता है, तो मुझे यह त्रुटि मिलती है। ऑनलाइन देखते हुए, यह एक मानक बैश कमांड लगता है, इसलिए मुझे यह सुनिश्चित नहीं है कि इसे काम करने के लिए क्या स्थापित करना है।
जब मैं एक स्क्रिप्ट चलाने की कोशिश करता हूं जिसमें एन्वाबस्ट कमांड होता है, तो मुझे यह त्रुटि मिलती है। ऑनलाइन देखते हुए, यह एक मानक बैश कमांड लगता है, इसलिए मुझे यह सुनिश्चित नहीं है कि इसे काम करने के लिए क्या स्थापित करना है।
जवाबों:
संपादित करें: @ cobberboy का एवर अधिक सही है। उसे उभारना।
brew install gettext
brew link --force gettext
निम्नलिखित मेरा पुराना उत्तर है:
envsubstgettextपैकेज में शामिल है ।
इसलिए आप मानक निर्माण उपकरण जैसे कि makeया का उपयोग करके इसे अपने द्वारा संकलित कर सकते हैं homebrew।
हालाँकि, ऐसा प्रतीत होता है कि gettextMacOS में इंस्टॉल करते समय यह बहुत कम समस्या है । विवरण के लिए निम्नलिखित यूआरएल देखें: मैकओएस एक्स पर गेटटेक्स्ट कैसे स्थापित करें
envsubstगेटटेक्स्ट का हिस्सा है (जैसा कि होमब्रे द्वारा स्थापित किया गया है) यह डिफ़ॉल्ट रूप से जुड़ा नहीं है। मुझे उम्मीद है कि यह है क्योंकि gettext एक केग-केवल सूत्र है। आप होमब्रे को केग को लिंक करने के लिए कह सकते हैं, लेकिन इसके अनजाने दुष्प्रभाव हो सकते हैं। एक कम घुसपैठ दृष्टिकोण 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 सहानुभूति?
gettextबहुत सारे सामान का एक नरक भी शामिल है; यह सिर्फ envsubstस्थापित करने के लिए ओवरकिल की तरह लगता है, लेकिन यह सबसे तेज और सरल तरीका है।
संभावित भ्रम को दूर करने के लिए:
envsubstएक बाहरी निष्पादन योग्य है और इस प्रकार बैश का हिस्सा नहीं है ; बाहरी निष्पादनयोग्य प्लेटफ़ॉर्म-निर्भर हैं , दोनों के संदर्भ में जो उनके विशिष्ट व्यवहार के साथ-साथ उपलब्ध हैं और विशिष्ट विकल्प जो वे समर्थन करते हैं (हालांकि, उम्मीद है, POSIX विनिर्देशों के आधार पर एक आम उपसमुच्चय है)bashको बिलिन कहा जाता है , और केवल उन्हें सभी प्लेटफार्मों पर उपस्थित होने पर भरोसा किया जा सकता है ।यह जांचने के लिए कि क्या दिया गया कमांड एक बिलिन है , उपयोग करें
type <cmdName>
मामले में, type envsubstmacOS 10.13 रिटर्न पर चल रहा है -bash: type: envsubst: not found, जिसमें से आप अनुमान लगा सकते हैं:
envsubst बिल्टिन नहीं हैenvsubstआपके सिस्टम में नहीं है $PATH(और इस तरह आपके सिस्टम पर मौजूद नहीं है)(इसके विपरीत, आदेश पर समान चल रहा है, उदाहरण के लिए, एक Ubuntu 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 विस्तार होगा - साथ ही एम्बेडेड कमांड प्रतिस्थापन , जो एक सुरक्षा चिंता का उपयोग करता है।evaleval echoक्योंकि मुझे स्रोत पर भरोसा है लेकिन यह समान नहीं है .. envsubst < .env.exampleबस नहीं हो सकता हैeval echo < .env.example
मैं अब इसका उपयोग अपने bash स्क्रिप्ट में कर रहा हूँ जिसमें envsubst की आवश्यकता है:
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 कमांड के रूप में उपयोग कर सकते हैं - बेशक यह पूर्ण या कुछ और नहीं है:
envsubst <<<'Honey, I am $HOME.'
envsubst < input > output 2> corrupt
"लगभग $ लाइन जोड़ने की कोशिश कर सकते हैं लेकिन मैंने अभी तक यह कोशिश नहीं की है
envsubstgettextपैकेज में शामिल है । आप अपने हिसाब से संकलन कर सकते हैं। देखें stackoverflow.com/questions/14940383/…