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