설정된 변수를 한 번에 내보내는 방법은 무엇입니까?

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

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

댓글

  • 내보내기의 의미 한 번에? 세미콜론을 사용하여 한 줄로 정의 할 수 있습니다 … 예 : a = 123; b = " asd asd "; c = " hello world "
  • unix.stackexchange와 매우 유사합니다. .com / q / 79064 / 4667
  • set는 BASH_VERSION과 같은 기능 및 시스템 변수도 표시합니다.
  • 질문이 명확하지 않습니다. . set에서 발췌 한 결과 '가 보여 주나요? 그렇다면 '는 bash '가 아닙니다. 특수 쉘 변수를 포함하여 현재 설정된 모든 변수를 내보내시겠습니까? 아니면 export a b c?
  • export ${!T*}와 같은 3 개의 변수 만 이름이

. 불행히도 ' 정의 된 모든 매개 변수 목록을 쉽게 생성 할 수있는 방법이없는 것 같습니다.

Answer

변수를 설정하기 전에 다음 명령을 실행합니다.

set -a 

man 페이지 :

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

이 옵션을 끄려면 나중에 set +a를 실행합니다.

예 :

set -a . ./environment set +a 

environment에는 다음이 포함됩니다.

FOO=BAR BAS="quote when using spaces" 

코멘트

  • 하지만 변수에 할당하기 전에 활성화해야합니다. ' 이전에 할당 된 변수에 대해 아무것도 수행하지 않습니다.
  • @chepner, 언급하는 것을 잊었습니다 !!
  • 이것은 또한 자동으로 function example(){ echo good; }; export -f example

Answer

와 같은 방식으로 함수를 내 보냅니다. 셸이 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 

답변

`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-defined-environment-variables-in-a-linux-ba

  2. 공백으로 구분 된 모든 환경 변수 이름 가져 오기 : awk -F "=" "BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}" 참조 : awk-Printing column valu e 새 줄없이 쉼표 추가 https://stackoverflow.com/questions/14212993/regular-expression-to-match-a-pattern-inside-awk-command

  3. 이제 이러한 변수를 내 보내야하지만 xargs는 자식 프로세스를 포크하기 때문에이를 수행 할 수 없습니다. 내보내기는 현재 프로세스에서 실행되어야합니다. echo "export" ... 원하는 명령을 빌드 한 다음“를 사용하여 실행합니다. 그게 전부입니다.

댓글

  • U에 오신 것을 환영합니다. & L SE. 게시물을 편집하고 설명을 할 수 있습니다.
  • 환경 변수 이름이 az로만 구성된다고 가정하는 것은 올바르지 않습니다.
  • ' 및 AZ. 일반적으로 밑줄과 숫자도 포함되므로 패턴은 [a-zA-Z_][a-zA-Z0-9_]*가됩니다. 쉘에 따라 약간의 변형이 있습니다. ' 사용하고 있지만 이것이 안전하고 이식 가능한 접근 방식입니다.
  • 좋은 점 @ChrisJohnson-업데이트되었습니다!

답변

awk 및 iv id = “69a748bd07″을 통해 변수 이름 앞에 export를 추가 할 수 있습니다. >

결과 출력 :

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

댓글

  • printenv는 이미 내 보낸 변수를 인쇄합니다. 또한 '가 작동하지 않습니다. 개행 문자를 포함하는 변수가있는 경우 오류가 발생합니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다