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

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

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

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

답변1

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

set -a
set -o allexport  # self-documenting version

매뉴얼 페이지:

-a
이 옵션이 활성화되면 할당이 수행될 각 변수에 대해 내보내기 속성을 설정해야 합니다.

-o option-name
해당 옵션을 설정하십시오 option-name.

  • allexport
    와 동일합니다 -a.

이 옵션을 끄려면 set +a또는 set +o allexport이후를 실행하세요.

예:

set -a  # or: set -o allexport 
. ./environment
set +a

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

FOO=BAR
BAS='quote when using spaces, (, >, $, ; etc'

답변2

선택한 답변과 동일한 초기 요구 사항...다음과 같이 각 변수를 명시적으로 내보냅니다.

export aaaa=1234

또는 변수 할당 문제가 발생하기 전에

set -a  #  for details see answer by @nitin 

쉘이 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

답변3

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

  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-command

  3. 이제 이러한 변수를 내보내야 하지만 xargs는 하위 프로세스를 포크하고 내보내기는 현재 프로세스에서 실행되어야 하기 때문에 이를 수행할 수 없습니다. echo "export" ...원하는 명령을 작성한 다음 ``를 사용하여 실행하세요. 그게 다야 :p.

답변4

compgen -v모든 변수 이름 목록을 인쇄하여 모두 내보낼 수 있습니다.

export $(compgen -v)

정의한 변수에 따라 다양한 효과가 나타납니다(예:BASHOPTS여기에서 내보낼 것입니다.). 사용방법에 주의하시기 바랍니다.

관련 정보