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:
envsubst
gettext
pakete dahildir .
Bu nedenle, gibi standart yapı araçlarını make
kullanarak veya kullanarak kendi başınıza derleyebilirsiniz homebrew
.
Ancak, gettext
MacOS'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
envsubst
bir 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/envsubst
yü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 envsubst
yü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:
envsubst
Bir 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)bash
denir 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 envsubst
macOS 10.13 üzerinde çalışmak -bash: type: envsubst: not found
şu sonuca varabileceğiniz geri döner :
envsubst
yerleşik DEĞİLDİRenvsubst
sisteminizde 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 envsubst
kullanmaktır eval
, ancak her zamanki uyarı geçerlidir: eval
yalnızca içeriğini kontrol ettiğiniz veya güvendiğiniz dizelerde kullanın :
sample.txt
Geniş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 :
envsubst
yalnı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 .eval
eval echo
Kaynağa güvendiğim için fikrini seviyorum ama bu aynı envsubst < .env.example
değ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
envsubst
gettext
pakete dahildir . kendi başınıza derleyebilirsiniz. bkz stackoverflow.com/questions/14940383/...