셸 변수 내보내기(저장) 및 가져오기(소스)

셸 변수 내보내기(저장) 및 가져오기(소스)

환경 변수를 파일에 저장해야 하며 (나중에) 프로세스에서 해당 변수를 가져와야 합니다. fooprog를 실행하기 전에 환경을 무효화하는 프로그램을 해결하려면 이것이 필요 barscript하며 barscript. 그래서 실행하기 전에 모든 환경 변수를 파일에 저장 fooprogram하고 barscript파일에서 가져올 계획 입니다.

이것을 시도했지만 공백이 포함된 변수가 있으면 작동하지 않습니다.

$ env > my_environment
$ . my_environment

/proc/$$/environ올바른 방법은 그것을 조작 하고 어떻게든 구문 분석하는 barscript것이지만 올바른 방법을 찾을 수 없습니다.

편집: 따옴표나 개행 문자에도 문제가 있습니다. 문제 없이 다음과 같은 문제가 있는 환경 변수를 얻으려면 어떻게 해야 합니까?

PROBLEMATIC='this has double quotes " and single quotes '\'' and even
newlines.

See?'

답변1

$ declare -p > my_environment

나중에 내부 barscript:

. my_environment

declare -p필요에 따라 변수를 인용하고 이스케이프하는 것을 포함하여 쉘 실행 파일 형식으로 환경 변수를 출력합니다.

$ foobar='"some double-quoted text"'
$ echo $foobar 
"some double-quoted text"
$ declare -p foobar
declare -- foobar="\"some double-quoted text\""

그런데 전체 환경을 출력하고 싶지 않다면 이 작업을 수행할 필요가 없습니다. 명령줄에 출력하려는 ​​변수의 이름을 지정하세요 declare -p.

$ declare -p HOME PATH foobar
declare -x HOME="/home/cas"
declare -x PATH="/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11"
declare -- foobar="\"double-quoted-text\""

또는 grep -v출력에 표시하지 않으려는 특정 변수를 파이프로 제외합니다.

내보낸 변수만 가져오기:

declare -p -x > my_environment

자세한 내용은 을 help declare참조하십시오 bash.

관련 정보