2016-09-15 4 views
0

부모 셸 스크립트의 변수를 자식으로 내보낼 수 있습니까? 다음 두 개의 스크립트를 실행하면 항상 0으로 돌아가지만 3을 반환하려고합니다. 또한 변수 오류를 .bash_profile에 성공하지 않고 설정하고 추가하려고했습니다.쉘 스크립트에서 전역 변수를 자식에서 부모로 내보내기

테스트 아니,

$ cat test.sh 
#!/bin/bash 
error=0 
./envtest.sh 
echo $error 

envtest.sh 주석 @chepner처럼

$ cat envtest.sh 
#!/bin/bash 
source ./test.sh 
test=3 
error=$test 
echo $error 
+0

파일을 소싱 해 보셨습니까? . ./envtest.sh – kcoder24

+1

아니요. 하위 프로세스에서 상위 환경에 영향을 줄 수는 없습니다. – chepner

+1

어구 "global"을 사용합니다. 이는 아마도 수출 변수가 무엇인지 오해 할 것입니다. 이들은 * 환경 블록 *이라는 메모리 블록에 상주하므로 * 환경 변수 *로 알려져 있습니다. 각 프로세스에는 자체 환경 블록이 있습니다. 새로운 프로세스가 만들어지면 (** fork) 부모로부터 자식에게 복사 된 ** 영역 중 하나입니다. 따라서 자식은 사본에서 작동하고 환경 변수는 전역 적이거나 공유되지 않습니다. – cdarke

답변

0

의 .sh.

당신이 test.sh 내에서 ./envtest.sh를 호출

는, 새로운 프로세스는 /bin/bash ./envtest.sh을 실행하기 위해 생성되고, 그 과정의 환경은 부모 프로세스에서 모든 환경 변수의 사본 초기화됩니다. envtest.sh 내부에서 무엇을 하든지 관계없이 자체 환경 내의 변수에만 영향을 줄 수 있습니다. 부모의 환경 변수를 만질 수는 없습니다.

+0

그래서 내가 사용할 수 있도록 외부 파일에 어떤 변수를 저장해야합니다. – Mensch

+0

프로세스간에 데이터를 전달하는 데는 여러 가지 방법이 있습니다. [명령 대체] (http://tldp.org/LDP/abs/html/commandsub.html), [대체 프로세스] (http://tldp.org/LDP/abs/html/process-sub.)를 사용할 수 있습니다. html), [I/O 리디렉션 및 파이핑] (http://www.tldp.org/LDP/abs/html/io-redirection.html), 데이터를 파일에 저장, 데이터베이스에 저장, 클라이언트에 데이터를 게시하는 HTTP 서비스 – dg99

관련 문제