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