envsubst 명령이 포함 된 스크립트를 실행하려고하면이 오류가 발생합니다. 온라인에서 보면 이것은 표준 bash 명령 인 것 같아서 작동시키기 위해 무엇을 설치해야할지 모르겠습니다.
답변:
편집 : @cobberboy의 답변이 더 정확합니다. 그를 찬성합니다.
brew install gettext
brew link --force gettext
다음은 내 오래된 대답입니다.
envsubst
gettext
패키지에 포함되어 있습니다.
따라서 당신은 같은 표준 빌드 도구를 사용하여, 자신에 의해 컴파일 할 수 있습니다 make
또는 사용 homebrew
.
그러나 gettext
MacOS에 설치할 때 별 문제가없는 것 같습니다 . 자세한 내용은 다음 URL을 참조하십시오. MacOS X에 gettext를 설치하는 방법
envsubst
에 gettext의 일부 (같은 사제에 의해 설치)이 기본적으로 연결되지이다. 나는 이것이 gettext가 술통 전용 공식이기 때문이라고 생각합니다. homebrew에게 술통을 연결하라고 지시 할 수 있지만 의도하지 않은 부작용이있을 수 있습니다. 덜 방해가되는 접근 방식은 alias envsubst='/usr/local/Cellar/gettext/0.19.6/bin/envsubst'
사용자 .profile
(또는 동등한 항목) 에 추가하여 별칭을 설정하는 것 입니다. 물론 다른 버전의 gettext가 설치되어있을 수 있습니다. 를 실행하여 배울 수 있습니다 brew info gettext
.
/usr/local/opt/gettext/bin/envsubst
업그레이드를 남아있는
brew install gettext
brew link --force gettext
이렇게하면 OS X에서 envsubst가 활성화되고 강제로 제대로 연결됩니다. 홈브류를 설치해야합니다.
Linking /usr/local/Cellar/gettext/0.19.8.1... 194 symlinks created
... wtf 194 심볼릭 링크?
gettext
많은 것들을 포함합니다. envsubst
설치하는 것만으로도 과한 것처럼 보이지만 가장 빠르고 간단한 방법입니다.
잠재적 인 혼란을 해결하려면 :
envsubst
인 외부 실행함으로써 배시 속하지 ; 외부 실행 파일은 플랫폼에 따라 다르며 사용 가능한 기능과 특정 동작 및 지원하는 특정 옵션에 따라 다릅니다.bash
이라고 내장 명령을 , 오직 그들 에 존재하는 의존 할 수 있는 모든 플랫폼 .에 시험 주어진 명령은 내장 여부 , 사용
type <cmdName>
type envsubst
당장 의 경우 macOS 10.13 에서 실행 -bash: type: envsubst: not found
하면을 반환 하며, 여기서 추론 할 수 있습니다.
envsubst
내장이 아님envsubst
시스템에 없습니다 $PATH
(따라서 시스템에 없을 가능성이 높습니다).(반대로, 예를 들어 Ubuntu 12.04 시스템에서 동일한 명령을 실행하면를 반환 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
is :
eval "echo \"$(sed 's/"/\\"/g' sample.txt)\""
그러나 중요한 차이점 이 있습니다 .
envsubst
환경 변수 참조 만 확장 합니다.eval
확장됩니다 쉘 변수 참조를 너무 -뿐만 아니라 내장 명령 대체 사용 만드는 것입니다, 보안 문제를.eval
eval echo
내가 원본을 신뢰할 수 있기 때문에 그것은 동일 하는 .. envsubst < .env.example
단지가 될 수 없습니다eval echo < .env.example
이제 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
"
$ 라인 주위하지만이 아직 시도하지 않았다
envsubst
gettext
패키지에 포함되어 있습니다. 직접 컴파일 할 수 있습니다. stackoverflow.com/questions/14940383/…