설정된 변수를 한 번에 내보내는 방법?


39

set명령은 아래와 같이 모든 지역 변수를 표시합니다. 이러한 변수를 한 번에 모두 내보내려면 어떻게합니까?

>set
a=123
b="asd asd"
c="hello world"

한 번에 수출한다는 것은 무엇을 의미합니까? 세미콜론을 사용하여 한 줄로 정의 할 수 있습니다 ... a = 123; b = "asd asd"; c = "hello world"
Raza


2
set또한 BASH_VERSION 같은 표시 기능 및 시스템 변수
글렌 잭맨

질문이 불분명합니다. 그게 set당신이 보여주는 출력 의 발췌 입니까? 그렇다면 bash' 이 아닙니다 . 특수 쉘 변수를 포함하여 현재 설정된 모든 변수를 내보내시겠습니까? 또는 export a b c? 와 같은 3 가지 변수 만 ?
Stéphane Chazelas 2016 년

export ${!T*}이름이로 시작하는 정의 된 매개 변수를 내 보냅니다 T. 불행히도, 정의 된 모든 매개 변수 목록을 쉽게 생성 할 수있는 방법이없는 것 같습니다 .
chepner 2016 년

답변:


72

변수를 설정하기 전에 다음 명령을 실행하십시오.

set -a 

매뉴얼 페이지 :

-a
이 옵션이 켜져 있으면, 할당이 수행되는 각 변수에 대해 내보내기 속성이 설정됩니다.

이 옵션을 끄려면 set +a나중에 실행하십시오 .

예:

set -a
. ./environment
set +a

어디에 environment포함 :

FOO=BAR
BAS='quote when using spaces'

13
그러나 변수에 할당하기 전에 활성화해야합니다. 이전에 할당 된 변수에는 아무런 영향을 미치지 않습니다.
chepner 2016 년

1
@ chepner, 고맙습니다. 나는 그것을 언급하는 것을 잊었습니다!
nitin

이것은 또한 자동으로 같은 방식으로 기능을 수출function example(){ echo good; }; export -f example
올리버 I

5
`echo "export" $((set -o posix ; set)|awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}')`
  1. 먼저 모든 설정된 환경 변수를 가져옵니다. (set -o posix ; set) 참조 : https://superuser.com/questions/420295/how-do-i-see-a-list-of-all-currently-definedly-environment-variables-in-a- 리눅스 바

  2. 모든 환경 변수 이름 얻기 공간으로 구분 : awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}' 참조 : 새로운 라인 추가 콤마없는 AWK-인쇄 열 값https://stackoverflow.com/questions/14212993/regular-expression-to-match-a-pattern-inside- awk- 명령

  3. 이제 이러한 변수를 내 보내야하지만 xargs는 자식 프로세스를 분기하고 내보내기는 현재 프로세스에서 실행해야하므로이를 수행 할 수 없습니다. echo "export" ...원하는 명령을 작성한 다음``를 사용하여 실행하십시오. 그게 다야 : p.


U & L SE에 오신 것을 환영합니다. 게시물을 수정하고 일부 설명을 제공 할 수 있습니다.
Archemar

1
환경 변수 이름이 az와 AZ로만 구성된다고 가정하는 것은 올바르지 않습니다. 일반적으로 밑줄과 숫자도 포함하므로 패턴은입니다 [a-zA-Z_][a-zA-Z0-9_]*. 사용중인 쉘에 따라 약간의 변형이 있지만 이것은 안전하고 이식 가능한 접근 방식입니다.
Chris Johnson

좋은 점 @ChrisJohnson-업데이트되었습니다!
윌 무어 III

3

당신은 앞에 추가 할 수 있습니다 export통해 변수의 이름 awkeval결과 출력 :

eval $(printenv | awk -F= '{ print "export " $1 }')

2
printenv이미 내 보낸 변수를 인쇄합니다. 개행 문자가 포함 된 변수가있는 경우에도 제대로 작동하지 않습니다.
Stéphane Chazelas

2

쉘이 bash 인 경우 작동합니다 (다른 쉘도 가능)

export > /my/env/var/file

새 파일에는 현재 정의 된 모든 변수의 덤프가 포함됩니다 ...

declare -x PORT="9000"
declare -x PORT_ADMIN="3001"
declare -x PORT_DOCKER_REGISTRY="5000"
declare -x PORT_ENDUSER="3000"
declare -x PRE_BUILD_DIR="/cryptdata6/var/log/tmp/khufu01/loud_deploy/curr/loud-build/hygge"
declare -x PROJECT_ID="hygge"
declare -x PROJECT_ID_BUSHIDO="bushido"

그런 다음 모든 환경 변수 문제로 현재 쉘을 연결합니다.

source  /my/env/var/file
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.