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

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

환경 변수를 파일에 저장해야 하고 (나중에) 프로세스에서 이를 가져와야 합니다. 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.

관련 정보