.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
1つのステップに進みます。元のファイル(.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