Envsubstコマンドを含むスクリプトを実行しようとすると、このエラーが発生します。オンラインで見ると、これは標準のbashコマンドのようであるため、動作させるために何をインストールするのかわかりません。
編集:@cobberboyの答えはより正確です。彼に投票してください。
brew install gettext
brew link --force gettext
以下は私の古い答えです:
envsubst
はgettext
パッケージに含まれています。
したがって、make
などの標準ビルドツールまたはhomebrew
を使用して、独自にコンパイルできます。
ただし、gettext
をMacOSにインストールする場合、ほとんど問題はないようです。詳細については、次のURLを参照してください。 MacOS Xにgettextをインストールする方法
brew install gettext
brew link --force gettext
これにより、OS Xでenvsubstが有効になり、強制的に適切にリンクされます。 homebrewをインストールする必要があります。
潜在的な混乱を解消するには:
envsubst
はexternal実行可能ファイルであり、したがってBashの一部ではありません;外部実行可能ファイルはplatform-dependentであり、どちらが利用可能か、特定の動作およびサポートする特定のオプションの両方の観点から(ただし、 POSIX仕様に基づく共通サブセットがあります)bash
に直接組み込まれたコマンドはbuiltinsと呼ばれ、theyallプラットフォームに存在することに依存できます。特定のコマンドが組み込みコマンドかどうかをテストするに、
_type <cmdName>
_
目前のケースでは、macOS 10.13で_type envsubst
_を実行すると_-bash: type: envsubst: not found
_が返され、そこから推測できます:
envsubst
は組み込みではありませんenvsubst
はシステムの_$PATH
_にありません(したがって、おそらくシステムに存在しません)(対照的に、Ubuntu 12.04システムで同じonコマンドを実行すると、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
は展開されますShell変数参照too-およびembeddedcommand substitutions、これはeval
aを利用するものです- セキュリティ上の懸念Envsubstを必要とするbashスクリプトでこれを使用しています。
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