config/env 파일의 변수에 접두사를 추가하는 방법

config/env 파일의 변수에 접두사를 추가하는 방법

나는 다음과 같은 상황에 처해 있습니다.

source local.env
run_my_app

에는 다음과 같이 local.env구체적으로 관련된 환경 변수가 많이 있습니다 run_my_app.

es_protocol="http"
es_host=0.0.0.0
es_port=9200

mongo_protocol=mongodb+srv
mongo_host=foo.cluster.mongodb.net
mongo_port=80
mongo_user=foo

rabbit_protocol=ampq
rabbit_host=foo.rabbitmq.svc.cluster.local
rabbit_port=5672
rabbit_user=rabbitmq

파일의 모든 변수에 중복되고 시끄러운 접두사를 추가하는 대신 my_app다음과 같이 셸 프로그램을 사용하여 접두사를 추가하고 싶습니다.

source <(add_var_prefix 'my_app' local.env)  ## *note below

add_var_prefix다음 두 가지 작업을 수행하는 Bash 함수를 구현하는 방법을 아는 사람이 있습니까 ?

  1. local.env파일의 모든 변수에 접두사 추가
  2. 변수를 가져오는 대신 변수 내보내기
  • source <(xyz)어떤 이상한 이유로 소스 코드가 프로세스 교체와 함께 작동하지 않기 때문에 이것은 작동하지 않습니다.

답변1

다음은 간단한 해결책입니다 sed.

source <(sed 's/[^=]\+=/export my_app_&/' local.env)

나는 등호를 포함하는 모든 줄이 변수 할당이라고 가정하고 여러 줄 변수나 같은 줄의 여러 할당과 같은 멋진 형식을 고려하지 않았기 때문에 이를 "순진한"이라고 부릅니다.

답변2

#정규식이 줄 시작 부분의 주석을 식별하는 @xhienne의 답변에 약간 추가하면 일부 QED 연습에서는 이 기술을 사용하여 소싱 및 내보내기를 모두 보여줍니다.

신선한 껍질에서:

$ set | grep prefix
$ bash -l
$ prefix=my_prefix
$ source <(sed -Ee "s/^([^#])/${prefix}_\1/" local.env)

이제 내 환경에 "prefix"와 일치하는 여러 줄이 있음을 확인할 수 있습니다.

$ set | grep prefix
my_prefix_es_host=0.0.0.0
my_prefix_es_port=9200
my_prefix_es_protocol=http
my_prefix_mongo_host=foo.cluster.mongodb.net
my_prefix_mongo_port=80
my_prefix_mongo_protocol=mongodb+srv
my_prefix_mongo_user=foo
my_prefix_rabbit_host=foo.rabbitmq.svc.cluster.local
my_prefix_rabbit_port=5672
my_prefix_rabbit_protocol=ampq
my_prefix_rabbit_user=rabbitmq
prefix=my_prefix

서브셸을 열고 다음 변수가 내보내지지 않았는지 다시 확인하세요.

$ bash -l
$ set | grep prefix
$ ^D
logout
$ ^D
logout

깨끗한 쉘로 돌아가기:

$ set | grep prefix
$ bash -l
$ prefix=my_prefix

이번에는 다음 변수를 모두 내보냅니다.

$ source <(sed -Ee "s/^([^#])/export ${prefix}_\1/" local.env)

이는 상위 셸에 있습니다.

$ set | grep prefix
my_prefix_es_host=0.0.0.0
my_prefix_es_port=9200
my_prefix_es_protocol=http
my_prefix_mongo_host=foo.cluster.mongodb.net
my_prefix_mongo_port=80
my_prefix_mongo_protocol=mongodb+srv
my_prefix_mongo_user=foo
my_prefix_rabbit_host=foo.rabbitmq.svc.cluster.local
my_prefix_rabbit_port=5672
my_prefix_rabbit_protocol=ampq
my_prefix_rabbit_user=rabbitmq
prefix=my_prefix

서브셸을 열면 거기에도 변수가 나타납니다.

$ bash -l
$ set | grep prefix
my_prefix_es_host=0.0.0.0
my_prefix_es_port=9200
my_prefix_es_protocol=http
my_prefix_mongo_host=foo.cluster.mongodb.net
my_prefix_mongo_port=80
my_prefix_mongo_protocol=mongodb+srv
my_prefix_mongo_user=foo
my_prefix_rabbit_host=foo.rabbitmq.svc.cluster.local
my_prefix_rabbit_port=5672
my_prefix_rabbit_protocol=ampq
my_prefix_rabbit_user=rabbitmq
$ ^D
logout
$ ^D
logout

관련 정보