Lorsque j'essaie d'exécuter un script contenant la commande envsubst, j'obtiens cette erreur. En regardant en ligne, cela semble être une commande bash standard, donc je ne sais pas quoi installer pour le faire fonctionner.
Edit: la réponse de @cobberboy est plus correcte. le voter.
brew install gettext
brew link --force gettext
Voici mon ancienne réponse:
envsubst
est inclus dans le package gettext
.
Par conséquent, vous pouvez le compiler par vous-même, en utilisant des outils de construction standard tels que make
ou en utilisant homebrew
.
Cependant, il semble avoir peu de problèmes lors de l'installation de gettext
dans MacOS. Voir l'url suivante pour plus de détails: Comment installer gettext sur MacOS X
brew install gettext
brew link --force gettext
Cela activera envsubst sur OS X et le forcera à se lier correctement. Il nécessite l'installation de homebrew.
Pour dissiper toute confusion potentielle:
envsubst
est un exécutable externe et donc ne fait pas partie de Bash ; les exécutables externes dépendent de la plate-forme , à la fois en termes de ceux qui sont disponibles ainsi que de leur comportement spécifique et des options spécifiques qu'ils prennent en charge (cependant, espérons-le, il existe un sous-ensemble commun basé sur les spécifications POSIX)bash
sont appelées intégrées , et seulement elles peut être invoqué pour être présent sur toutes les plateformes .Pour tester si une commande donnée est une commande intégrée, utilisez
type <cmdName>
Dans le cas présent, l'exécution de type envsubst
Sur macOS 10.13 renvoie -bash: type: envsubst: not found
, Dont vous pouvez déduire:
envsubst
n'est PAS une fonction intégréeenvsubst
n'est pas dans le $PATH
de votre système (et donc probablement pas présent sur votre système)(En revanche, l'exécution de la même commande on, par exemple, un système Ubuntu 12.04 renvoie envsubst is hashed (/usr/bin/envsubst)
, qui vous indique que l'utilitaire est présent et où il se trouve.)
Une alternative de fortune à envsubst
consiste à utiliser eval
, bien que la mise en garde habituelle s'applique: n'utilisez eval
que sur les chaînes dont vous contrôlez ou approuvez le contenu:
Supposons un fichier sample.txt
Contenant du texte avec des références de variables non développées; par exemple.:
cat > sample.txt <<'EOF'
Honey, I'm $USER
and I'm $HOME.
EOF
L'équivalent de:
envsubst < sample.txt
est:
eval "echo \"$(sed 's/"/\\"/g' sample.txt)\""
Il y a différence cruciale, cependant:
envsubst
se développe ( uniquement environnement références de variableseval
développera Shell références de variables aussi - ainsi que incorporé substitutions de commandes , ce qui fait que utilisation de eval
a problème de sécurité.J'utilise ceci maintenant dans mon script bash qui nécessite 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
vous pouvez l'utiliser comme commande envsubst - bien sûr, ce n'est pas une fonctionnalité complète ou autre chose:
envsubst <<<'Honey, I am $HOME.'
envsubst < input > output 2> corrupt