2011-08-27 7 views
0

때로는 명령 줄에서 실행되는 프로그램을 디버깅 할 때 터미널 창을 닫고 새 창을 열어 다시 시도 할 때까지 뚜렷한 변경이 적용되지 않을 수 있습니다. 나는 Mac OS (즉, bash)와 Windows 모두에서 이런 일이 발생했다.터미널 창을 닫고 왜 새 창을 열 때가 종종 해결책입니까?

이것은 명백한 솔루션이 실패 할 때 마지막으로하는 일이지만, 이유를 알고 싶습니다. 커맨드 라인 프로그램이 생성 될 때 스냅 샷을 "캡쳐 (capture)"하는 것입니까? (그들은 그것을 위해 경로를 검색하지 않아도)

+0

확실하지는 않지만 명령 이름이 어떤 실행 파일을 참조하는지 기억해야 할 수 있습니다. '/ usr/bin/foo'를 사용하고'/ usr/local/bin/foo'를 생성했다면, 쉘은 후자를 볼 수 없습니다. (어쨌든 나는 이것이 그렇지 않다고 느낀다.) – Owen

+0

'hash -r'은 Bash의 덜 해친 수정입니다. – tripleee

답변

1

쉘은 시스템 전체 환경 변수를 변경하는 경우, 당신은 새로운 환경을 얻을 수있는 새로운 쉘을 시작해야

알려진 바이너리를 해시 수 있습니다. 자식 프로세스가 부모로부터 자신의 환경을 상속 받기 때문에 서브 쉘을 입력하는 것만으로는 작동하지 않는다는 것에 유의하십시오.

+0

"Shells has known binaries"를 확장 할 수 있습니까? 나는 해시가 무엇인지 알고있다. 명령을 실행하려고 할 때 어떻게 든 사용됩니까? –

+0

_ 시스템 전체의 환경 변수가 바뀌면 새 환경을 만들기 위해 새 셸을 시작해야합니다 ._ 좋아, 그것이 내가 생각한 것입니다. 누구든지 ** 새로운 쉘을 시작해야하는 이유 **에 대해 더 많이 말할 수 있습니까? 쉘이 모든 환경 변수의 현재 상태를 인식 할 수없는 이유가 있습니까? 감사. –

+1

@ 그레그 : 부분적으로 정의에 의한; 유닉스는 오랜 유산을 가지고있다. 주요 용도는 보안입니다 : 신뢰할 수없는 코드를 실행하는 데 사용할 수있는 PATH/LIBPATH/LD_LIBRARY_PATH 등을 손상시키지 않도록 환경 조작을 방지합니다. 확장을 통해 프로세스를 격리하는 역할을합니다. 일부 프로세스는 사용자 정의 PATH 등을 필요로하며, 하위 프로세스가 부모와 동일한 환경에 의존하기 때문에 '새 _ 전역 환경'에서 시작한 경우 제대로 작동하지 않습니다. – sehe

관련 문제