Envsubst komutunu içeren bir betik çalıştırmayı denediğimde bu hatayı alıyorum. Çevrimiçi baktığımda, bu standart bir bash komutu gibi görünüyor, bu yüzden çalışmasını sağlamak için ne kurmam gerektiğinden emin değilim.
Envsubst komutunu içeren bir betik çalıştırmayı denediğimde bu hatayı alıyorum. Çevrimiçi baktığımda, bu standart bir bash komutu gibi görünüyor, bu yüzden çalışmasını sağlamak için ne kurmam gerektiğinden emin değilim.
Yanıtlar:
Düzenleme: @cobberboy'un cevabı daha doğrudur. ona olumlu oy verin.
brew install gettext
brew link --force gettext
Eski cevabım şu:
envsubstgettextpakete dahildir .
Bu nedenle, gibi standart yapı araçlarını makekullanarak veya kullanarak kendi başınıza derleyebilirsiniz homebrew.
Ancak, gettextMacOS'a yüklerken küçük bir sorunu var gibi görünüyor . Ayrıntılar için aşağıdaki url'ye bakın: MacOS X'te gettext nasıl kurulur
envsubstbir parçası iken (homebrew tarafından kurulduğu gibi), varsayılan olarak bağlantılı değildir. Bunun, gettext'in yalnızca fıçı içeren bir formül olması nedeniyle olmasını bekliyorum. Homebrew'e fıçıyı bağlamasını söyleyebilirsin, ama bunun istenmeyen yan etkileri olabilir. Daha az müdahaleci bir yaklaşım, alias envsubst='/usr/local/Cellar/gettext/0.19.6/bin/envsubst'size .profile(veya eşdeğerine) ekleyerek bir takma ad ayarlamaktır . Elbette, başka bir gettext sürümüne sahip olabilirsiniz. Koşarak öğrenebilirsiniz brew info gettext.
/usr/local/opt/gettext/bin/envsubstyükseltmelerden sonra kalan bir takma ad kullanmak istiyorsunuz
brew install gettext
brew link --force gettext
Bu, OS X'de envsubst'u etkinleştirecek ve onu düzgün bir şekilde bağlanmaya zorlayacaktır. Homebrew'in kurulmasını gerektirir.
Linking /usr/local/Cellar/gettext/0.19.8.1... 194 symlinks created... wtf 194 sembolik bağlantı?
gettext, pek çok şey içeriyor; sadece envsubstyüklenmek için aşırı gibi görünüyor ama en hızlı ve en basit yol bu.
Olası kafa karışıklığını gidermek için:
envsubstBir olan dış yürütülebilir ve bu nedenle Bash parçası olmayan ; harici çalıştırılabilir dosyalar platforma bağlıdır , hem hangilerinin mevcut olduğu hem de özel davranışları ve destekledikleri özel seçenekler açısından (umarız, POSIX özelliklerine dayalı ortak bir alt küme vardır)bashdenir yerleşiklerini ve sadece onlar üzerinde mevcut olması güvenilemez bütün platformlarda .To testi, belirli bir komut bir yerleşik olup olmadığını , kullanım
type <cmdName>
Eldeki durumda, type envsubstmacOS 10.13 üzerinde çalışmak -bash: type: envsubst: not foundşu sonuca varabileceğiniz geri döner :
envsubst yerleşik DEĞİLDİRenvsubstsisteminizde değil $PATH(ve bu nedenle muhtemelen sisteminizde mevcut değil)(Bunun tersine, aynı komut üzerinde çalıştırma, örneğin, bir Ubuntu 12.04 sistemi geri döner envsubst is hashed (/usr/bin/envsubst), bu size yardımcı programın mevcut olduğunu ve nerede bulunduğunu söyler.)
Bunun geçici bir alternatifi envsubstkullanmaktır eval, ancak her zamanki uyarı geçerlidir: evalyalnızca içeriğini kontrol ettiğiniz veya güvendiğiniz dizelerde kullanın :
sample.txtGenişletilmemiş değişken referanslara sahip metin içeren bir dosya varsayın ; Örneğin:
cat > sample.txt <<'EOF'
Honey, I'm $USER
and I'm $HOME.
EOF
Eşdeğeri:
envsubst < sample.txt
dır-dir:
eval "echo \"$(sed 's/"/\\"/g' sample.txt)\""
Bununla birlikte , çok önemli bir fark var :
envsubstyalnızca ortam değişkeni referanslarını genişletireval kabuk değişken referanslarını da genişletir - ayrıca bir güvenlik endişesinden yararlanan gömülü komut ikamelerini de genişletir .evaleval echoKaynağa güvendiğim için fikrini seviyorum ama bu aynı envsubst < .env.exampledeğil .. sadece olamazeval echo < .env.example
Bunu şimdi envsubst gerektiren bash betiğimde kullanıyorum:
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 komutu olarak kullanabilirsiniz - elbette tam özellikli veya başka bir şey değil:
envsubst <<<'Honey, I am $HOME.'
envsubst < input > output 2> corrupt
"$ line civarında eklemeyi deneyebilirsiniz, ancak bunu henüz denemedim
envsubstgettextpakete dahildir . kendi başınıza derleyebilirsiniz. bkz stackoverflow.com/questions/14940383/...