파일에서/로의 변수 대체

파일에서/로의 변수 대체

파일의 자리 표시자를 다른 파일의 변수로 바꾸는 방법은 무엇입니까? (docker-compose와 같습니다.)

단일 변수 대체 또는 환경 변수 대체에 관한 기사를 많이 찾았지만 파일 간 기사는 없습니다.

.env 파일

name=John
time='10:00'

콘텐츠 파일

Hello "${name}"! I wait for u since ${time}.

결과물 파일:

Hello "John"! I wait for u since 10:00.

"편집: 파일에 보관하고 싶습니다 .

Edit2: 결국 @steeldriver의 솔루션을 사용하게 되었습니다. 이것이 지금 내 스크립트에서 사용하고 있는 것입니다.

# Make copy of the template folder (containing scripts and `.env` file)
cp -r templates .templates

# Replace environment variables in all files of the folder
set -a
for file in $(find .templates -type f)
do
    . ./.env && envsubst < $file > $file.tmp && mv $file.tmp $file
done
set +a

# create output directory
mkdir -p $HOME/output/

# copy if new or modified
rsync -raz .templates/. $HOME/output/

# remove temp folder
rm -r .templates

답변1

사용envsubst

set -a
. ./.env && envsubst < content
set +a

set -aset +a/ 생성/수정된 변수의 자동 내보내기를 켜거나 끕니다 .

답변2

작동하는 솔루션을 찾았습니다.파일의 환경 변수를 실제 값으로 바꾸시겠습니까?

(. .env && eval "echo \"$(cat config.xml)\"")

편집: 이 솔루션은 "파일의 태그도 제거합니다. 그것은 내가 원하는 것이 아닙니다.

관련 정보