2013-06-27 1 views
5

내가 읽은 바에 따르면은 csh이고 export은 bash입니다. 그러나 두 가지 작업을하는 동안 몇 가지 이상한 문제를 발견했습니다.csh에서 "setenv"와 bash에서 "export"의 범위

내가 퍼티를 열고 입력을 시작하면 : 나는 반대 순서 그것을 할 경우

setenv TEMP yes 
echo $TEMP //this give me "yes" 

그때 나는, 그러나

echo $TEMP //this give me "yes" as well 

을 비난하고 입력로 이동, 그것은을주지 못할 것이다 같은 결과. 특히, 내가 갈 때 먼저 비난하고

export TEMP=no 
echo $TEMP //this give me "no" 

그때 내가 CSH로 돌아가서

echo $TEMP // this give me "Undefined Variable" 

은 "No"가 아니라 나를 포기하지 안 입력

입력? 내가 놓친 게 있니?

감사합니다.

+1

"그럼 내가 csh로 돌아 간다"는게 무슨 뜻이야? "csh로 돌아 가기"위해 정확히 무엇을 입력합니까? – rici

+0

csh는 내 로그인 쉘이므로 bash에서 "exit"를 입력하면 csh로 돌아갑니다. –

+2

오른쪽. 변수를 내보낼 때 변수는 자식으로 내보내지 만 부모 변수로 내보내지지 않습니다. "exit"를 입력하면 모든 변수가 사라집니다. – rici

답변

8

변수를 내보내는 것은 해당 변수의 복사본이 새로 생성 된 하위 프로세스의 환경에 배치됨을 의미합니다. 변수의 복사본입니다. 자식 프로세스가 변수를 수정하면 부모는 수정 내용을 보지 못합니다. 더욱이, 하위가 변수를 내 보내면 부모에서 볼 수 없게됩니다.

따라서 두 경우는 비대칭입니다. csh에서 시작하여 변수를 내 보낸 다음 bash를 시작하면 bash는 내 보낸 변수를 보게됩니다. 그런 다음 bash에서 새 변수를 내보내고 bash에서 나가서 csh로 돌아 가면 bash 세션에서 작성된 모든 변수가 사라집니다.

bash에서 변수를 반출 한 다음 (csh을 입력하여) 하위 csh를 시작하면 내 보낸 변수가 거의 확실하게 표시됩니다.

+0

많은 의미가 있습니다! 고맙습니다! –