![내보내기가 서브쉘에 영향을 주지 않는 이유는 무엇입니까?](https://linux55.com/image/49632/%EB%82%B4%EB%B3%B4%EB%82%B4%EA%B8%B0%EA%B0%80%20%EC%84%9C%EB%B8%8C%EC%89%98%EC%97%90%20%EC%98%81%ED%96%A5%EC%9D%84%20%EC%A3%BC%EC%A7%80%20%EC%95%8A%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
만약 내가 가지고 있다면
$ 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
-x
Bash의 스위치를 사용하여 위의 출력을 더 장황하게 만들 수도 있습니다 .
$ bash -x -c -i 'echo $x'