Wenn ich versuche, ein Skript auszuführen, das den Befehl envsubst enthält, wird dieser Fehler angezeigt. Wenn ich online schaue, scheint dies ein Standard-Bash-Befehl zu sein, daher bin ich mir nicht sicher, was ich installieren soll, damit es funktioniert.
91
envsubst
ist imgettext
Paket enthalten. Sie können selbst kompilieren. siehe stackoverflow.com/questions/14940383/…Antworten:
Bearbeiten: @cobberboys Antwort ist korrekter. stimme ihm zu.
Folgendes ist meine alte Antwort:
envsubst
ist imgettext
Paket enthalten.Daher können Sie es selbst kompilieren, indem Sie Standard-Build-Tools wie
make
oder verwendenhomebrew
.Bei der Installation
gettext
unter MacOS scheint es jedoch kaum Probleme zu geben. Weitere Informationen finden Sie in der folgenden URL: So installieren Sie gettext unter MacOS X.quelle
envsubst
es Teil von gettext ist (wie von Homebrew installiert), ist es standardmäßig nicht verknüpft. Ich gehe davon aus, dass gettext eine reine Fassformel ist. Sie könnten Homebrew anweisen, das Fass zu verbinden, aber dies könnte unbeabsichtigte Nebenwirkungen haben. Ein weniger aufdringlicher Ansatz besteht darin, einen Alias einzurichtenalias envsubst='/usr/local/Cellar/gettext/0.19.6/bin/envsubst'
, indem Sie ihn zu Ihrem.profile
(oder einem gleichwertigen) hinzufügen . Natürlich können Sie auch eine andere Version von gettext installieren. Sie können es durch Laufen lernenbrew info gettext
./usr/local/opt/gettext/bin/envsubst
der Upgrades überlebtDadurch wird envsubst unter OS X aktiviert und die ordnungsgemäße Verknüpfung erzwungen. Es muss Homebrew installiert sein.
quelle
Linking /usr/local/Cellar/gettext/0.19.8.1... 194 symlinks created
... wtf 194 symlinks?gettext
enthält eine Menge Sachen; Es scheint ein Overkill zu sein, nur umenvsubst
installiert zu werden, aber es ist der schnellste und einfachste Weg.Um mögliche Verwirrung zu beseitigen:
envsubst
ist eine externe ausführbare Datei und daher nicht Teil von Bash ; Externe ausführbare Dateien sind plattformabhängig , sowohl hinsichtlich der verfügbaren als auch hinsichtlich ihres spezifischen Verhaltens und der von ihnen unterstützten spezifischen Optionen (obwohl es hoffentlich eine gemeinsame Teilmenge gibt, die auf den POSIX-Spezifikationen basiert).bash
werden als builtins , und nur sie können auf über anwesend sein verlassen alle Plattformen .Verwenden Sie , um zu testen, ob ein bestimmter Befehl integriert ist
Im vorliegenden Fall wird unter
type envsubst
macOS 10.13 zurückgegeben-bash: type: envsubst: not found
, woraus Sie schließen können:envsubst
ist NICHT eingebautenvsubst
befindet sich nicht in Ihrem System$PATH
(und ist daher wahrscheinlich nicht in Ihrem System vorhanden)(Wenn Sie dagegen denselben Befehl auf einem Ubuntu 12.04-System ausführen
envsubst is hashed (/usr/bin/envsubst)
, wird zurückgegeben, dass das Dienstprogramm vorhanden ist und sich dort befindet.)Eine provisorische Alternative zu
envsubst
ist die Verwendungeval
, obwohl die übliche Einschränkung gilt:eval
Nur für Zeichenfolgen verwenden, deren Inhalt Sie kontrollieren oder denen Sie vertrauen:Angenommen, eine
sample.txt
Datei enthält Text mit nicht erweiterten Variablenreferenzen. z.B:Das Äquivalent von:
ist:
Es gibt jedoch einen entscheidenden Unterschied :
envsubst
erweitert nur die UmgebungUmgebungsvariablenreferenzeneval
expandieren Shell Variablenreferenzen zu - sowie eingebettete Befehlsersetzungen , das ist , was die Verwendung von machteval
ein Sicherheitsproblem.quelle
eval echo
weil ich der Quelle vertraue, aber es ist nicht dasselbe.envsubst < .env.example
Kann nicht einfach seineval echo < .env.example
Ich verwende dies jetzt in meinem Bash-Skript, für das envsubst erforderlich ist:
Sie können es als Befehl envsubst verwenden - natürlich ist die Funktion nicht vollständig oder etwas anderes:
quelle
"
um $ line hinzuzufügen , aber ich habe dies noch nicht versuchtWenn Sie sich nicht die Mühe machen möchten, Homebrew und gettext zu installieren, reicht ein Einzeiler-Perl aus:
quelle