env 파일의 각 값에 큰따옴표를 추가하는 방법

env 파일의 각 값에 큰따옴표를 추가하는 방법

.env.sh 파일에 복사해야 하는 .env 파일이 있습니다. 이 명령은 .env.sh 파일로 내보냅니다.

scriptPath=$(dirname "$(readlink -f "$0")")
printenv | sed 's/^\(.*\)$/export \1/g' > ${scriptPath}/.env.sh

내 .env 파일:

DB_MYSQL_TYPE=mysql
DB_MYSQL_CONNECTOR=pymysql
DB_MYSQL_USER=tuandc
DB_MYSQL_PASS=mypass
DB_MYSQL_HOST=mysql.host
DB_MYSQL_PORT=3306
DB_MYSQL_DBNAME=vietnam

.env.sh로 내보냈습니다.

export DB_MYSQL_TYPE=mysql
export DB_MYSQL_CONNECTOR=pymysql
export DB_MYSQL_USER=tuandc
export DB_MYSQL_PASS=mypass~.(?Tweg
export DB_MYSQL_HOST=mysql.host
export DB_MYSQL_PORT=3306
export DB_MYSQL_DBNAME=vietnam

하지만 DB_MYSQL_PASS에서 일부 특수 문자를 이스케이프 처리하기 위해 큰따옴표를 사용하고 싶습니다.

printenv | sed -e 's/=\(.*\)/="\1/g' -e 's/$/"/g' >> ${scriptPath}/.env.sh
DB_MYSQL_TYPE="mysql"
DB_MYSQL_CONNECTOR="pymysql"
DB_MYSQL_USER="tuandc"
DB_MYSQL_PASS="mypass~.(?Tweg"
DB_MYSQL_HOST="mysql.host"
DB_MYSQL_PORT="3306"
DB_MYSQL_DBNAME="vietnam"

하지만 위의 2개 정규식을 결합하여 다음과 같이 .env.sh 파일을 완성하고 싶습니다.

export DB_MYSQL_TYPE="mysql"
export DB_MYSQL_CONNECTOR="pymysql"
export DB_MYSQL_USER="tuandc"
export DB_MYSQL_PASS="mypass~.(?Tweg"
export DB_MYSQL_HOST="mysql.host"
export DB_MYSQL_PORT="3306"
export DB_MYSQL_DBNAME="vietnam"

답변1

$ declare -px

declare적절해 보이는 Bash 내장 명령입니다. 이 명령은 기존 변수 할당에서 쉘 특수 문자를 이스케이프합니다.

답변2

sed이는 스트림 편집기를 사용하여 쉽게 수행할 수 있습니다.

sed -i.bak -e `s/=/="/;s/$/"/` .env.sh 

이는 다음을 수행합니다.

  • -i.bak- 제자리에서 편집하고 원본 파일은 .env.sh.bak.
  • s/=/="/-사용 =. . . 교체 " ="".
  • ;- 명령 구분 기호
  • s/$/"/- 줄 끝을 일치시키고 따옴표를 추가합니다.

읽다man sed

답변3

한 단계로 진행합니다. 원본 파일( .env) 사용:

printenv | sed 's/\(^[^=]*\)=\(.*\)/export \1="\2"/' > "$scriptPath/.env.sh"

답변4

감사합니다. 정규식 2개를 연결하는 솔루션을 찾았습니다.

printenv | sed -e 's/^\(.*\)$/export \1/g' -e 's/=\(.*\)/="\1/g' -e 's/$/"/g' >> ${scriptPath}/.env.sh

관련 정보