properties
파일의 각 속성을 환경 변수로 변환 해야 합니다 .
내 말은, 이 속성 파일을 추측해 보세요:
mongo.port=27017
mongo.host=127.0.0.1
mongo.databaseName = test
bo.url-jwt=https://localhost:8089/token
환경 변수로 만들고 싶습니다.
export MONGO_PORT=27017
export MONGO_HOST=127.0.0.1
export MONGO_DATABASENAME=test
export BO_URL_JWT=https://localhost:8089/token
이것을 얻을 수 있는 도구나 스크립트가 있나요?
우분투 18x + zsh를 사용하고 있습니다
답변1
이 작업을 수행하는 짧은 스크립트는 다음과 같습니다.
#!/bin/bash
tmp1=$(mktemp)
tmp2=$(mktemp)
cut -d= -f 1 props.txt | tr '[:lower:]' '[:upper:]' | tr '.-' '_' > $tmp1
cut -d= -f 2 props.txt > $tmp2
paste -d= $tmp1 $tmp2 > output.props
sed -i 's/ *= */=/' output.props
sed -i 's/^/export /' output.props
rm $tmp1 $tmp2
스크립트는 다음과 같이 작동합니다. 두 개의 임시 파일을 생성하는 데 사용됩니다 mktemp
. 입력 속성 파일은 "=" 문자로 분할되며 두 개의 해당 필드가 두 파일 모두에 전송됩니다.
첫 번째 필드(속성 이름)에서는 tr
명령이 두 번 적용됩니다. 한 번은 소문자를 대문자로 변환하고 한 번은 특수 문자를 밑줄로 변경합니다. 필드 값은 이러한 변경 후에만 임시 파일에 기록됩니다.
처리가 완료되면 이 paste
명령을 사용하여 필드를 단일 파일인 output.props로 다시 그룹화합니다. 그런 다음 sed
두 가지 명령을 사용하십시오. 첫 번째는 "=" 문자 주위의 모든 공백 문자를 제거합니다. 그렇지 않으면 이는 명령에 대한 구문 오류가 됩니다 export
. 두 번째 sed
명령은 각 줄에 "export"라는 문자열을 접두어로 붙이는 데 사용됩니다. 마지막으로 이 두 개의 임시 파일이 정리됩니다.
예제 출력:
$ cat output.props
export MONGO_PORT=27017
export MONGO_HOST=127.0.0.1
export MONGO_DATABASENAME=test
export BO_URL_JWT=https://localhost:8089/token
출력 파일을 생성한 후 이를 사용하여 환경에서 실제로 변수를 설정합니다. 이를 위해 다음 두 구문 중 하나를 사용할 수 있습니다.
. output.props
source output.props