2016-08-24 12 views
3

linux 명령 줄 도구 env은 현재 환경을 덤프 할 수 있습니다.env -0 덤프 환경. 하지만 어떻게로드 할 수 있습니까?

일부 특수 문자가 있으므로 env -0을 사용하고 싶습니다 (개개의 출력 행을 개행 문자 대신 0 바이트로 끝내십시오).

그러나이 덤프를 다시로드하는 방법은 무엇입니까?

배쉬 버전 :

+0

당신이'load' 무엇을 의미합니까 출력을 생성하는 동안


는 예를 들어, env 출력을

foo=hello world 

을 생산? – hek2mgl

+0

@ hek2mgl "로드"는 다른 쉘에서이 변수들을 설정하는 것을 의미합니다. – guettli

답변

8

env를 사용하지 마십시오을; 다시 실행될 수있는 형식으로 내 보낸 변수의 값을 출력하는 declare -px을 사용하십시오. 단지합니다 (-x 옵션을 삭제) declare -p를 사용

$ declare -px > env.sh 
$ source env.sh 

이것은 또한 당신에 대한 액세스 권한이없는 env뿐만 아니라 -exported 변수를 저장하는 가능성을 제공합니다. 당신이 foo=$'hello\nworld'을 쓴 경우 declare -px

declare -x foo="hello 
world" 
+0

예, 개행 문자가 변수에 있어도 작동합니다. 고맙습니다. – guettli

3

당신이 Set environment variables from file에 설명되어있는 것을 사용할 수 env의 수출로드하려면 4.2.53 :

env > env_file 
set -o allexport 
source env_file 
set +o allexport 

을하지만 -0로 내보낼 일 경우 사용을 ()에서 man env :

-0 0 바이트 레스와 --null
단부 각 출력 라인 어 줄 바꿈보다

그래서 당신은 문자 구분 기호로 0을 사용하여 파일을 통해 루프는 줄의 끝 (What does IFS= do in this bash loop: cat file | while IFS= read -r line; do … done 더 설명) 표시 할 수 있습니다

env -0 > env_file 
while IFS= read -r -d $'\0' var 
do 
    export "$var" 
done < env_file 
+0

첫 번째 해결책은 내 경우에 작동하지 않는다 :'env> env_file''set -o allexport''source env_file' 출력'-bash : PROFILEREAD : 읽기 전용 변수 bash : 52052 : 명령을 찾을 수 없습니다 ... 찾을 수없는 메시지)' – guettli

+1

두 번째 해결책 (env -0)은 다음을 제외하고 작동합니다 :'PROFILEREAD readonly variable' – guettli

+0

@guettli uhms 이것은 당신의 변수가 읽기 전용으로 설정 되었기 때문입니다. 그들을 재설정하는 방법에 대한 몇 가지 해킹이 있습니다. (http://stackoverflow.com/a/17398009/1983854) ... – fedorqui