.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