내보내기가 서브쉘에 영향을 주지 않는 이유는 무엇입니까?

내보내기가 서브쉘에 영향을 주지 않는 이유는 무엇입니까?

만약 내가 가지고 있다면

$ x='This is a String'
$ export x

$ xterm &
[3] 14089

하위 프로세스가 응답하지 않는 것 같습니다.

$echo $x
$

고쳐 쓰다: 변수를 처음 내보낼 때 프로세스에 걸쳐 있는 것처럼 보입니까? -

$ export xb
[1]+  Done                    xterm
durrantm.../durrantm$ export xb
durrantm.../durrantm$ 
# Note second export didn't say anything.

답변1

하위 프로세스가 분기되면 상위 프로세스의 환경을 해당 하위 프로세스로 내보낼 수 없습니다. 자식은 회전할 때 부모의 현재 환경 복사본을 가져오는 분기된 셸입니다. 그때부터 그들은 혼자였습니다.

귀하의 경우 포크하기 전에 변수를 설정하므로 모든 하위 항목에 설정된 변수가 표시되어야 합니다. 그런데 맞춤법 오류가 발생한 것 같습니다. 노력하다 echo $x.

상위 셸에서 다음을 수행합니다.

$ x='This is a String'
$ export x
$ xterm &
[1] 28578

xterm에서:

$ echo $x
This is a String

로그인 파일로 변수가 재설정됩니까?

드문 경우지만 손실된 변수가 발생하거나 set부모 unset의 환경 변수가 제거되어 자식에게 깔끔하게 전달되지 않을 수도 있습니다. 다음과 같이 확인할 수 있습니다.

# login shell
$ bash -c -l 'echo $x'
This is a String

# interactive shell
$ bash -c -i 'echo $x'
This is a String

-xBash의 스위치를 사용하여 위의 출력을 더 장황하게 만들 수도 있습니다 .

$ bash -x -c -i 'echo $x'

관련 정보