cd
쉘 내장 외에도 POSIX 호환 OS에 대한 프로그램이기도합니다 . 이들은 같은 일반 유틸리티를위한 독립적 인 실행 파일을 제공 해야합니다cd
. 예를 들어 Solaris , AIX , HP-UX 및 OS X의 경우 입니다.
분명히 cd
외부 구현은 현재 쉘 디렉토리를 변경하지 않으므로 내장 은 여전히 필수입니다. 그러나 후자는 여전히 유용 할 수 있습니다. 다음은 POSIX가이 cd
명령을 사용 하는 방법을 상상하는 방법을 보여주는 예입니다 .
find . -type d -exec cd {} \;
POSIX 시스템에서이 oneliner는 허용되지 않는 모든 디렉토리에 대한 오류 메시지를보고합니다 cd
. 대부분의 Gnu / Linux 배포에서는 다음과 같은 오류 메시지와 함께 실패합니다.
find: `cd': No such file or directory
그리고 원래 Unix 공동 저자 중 한 명이 " 왜 CD가 프로그램이 아닌가? " 라는 질문에 대한 답이 있습니다 . 초창기의 유닉스 구현 cd
( chdir
그 당시 철자 )은 외부 프로그램이었습니다. fork
처음 구현 된 후 예기치 않게 작동이 중지되었습니다 .
인용 데니스 리치 :
우리의 환대 중에 chdir (현재 디렉토리 변경) 명령이 작동을 멈췄다는 것이 발견되었습니다. 포크의 추가가 chdir 호출을 어떻게 깨뜨릴 수 있었는지에 대한 많은 코드 읽기와 불안한 내성도있었습니다. 마침내 진실은 시작되었다. 구 시스템에서 chdir은 일반적인 명령이었다. 터미널에 연결된 (고유 한) 프로세스의 현재 디렉토리를 조정했습니다. 새 시스템에서 chdir 명령은 실행하기 위해 작성된 프로세스의 현재 디렉토리를 올바르게 변경했지만이 프로세스는 즉시 종료되었으며 상위 쉘에는 아무런 영향을 미치지 않았습니다! chdir을 쉘 내부에서 실행되는 특수 명령으로 만들어야했습니다. 로그인과 같은 몇 가지 명령과 같은 기능은 동일한 속성을 가지고 있습니다.
출처 : Dennis M. Ritchie,“ 유닉스 시간 공유 시스템의 진화 ”, AT & T Bell Laboratories 기술 저널 63 (6), 2 부, 1984 년 10 월, pp.1577–93
유닉스 버전 1 (1971 년 3 월) chdir 매뉴얼 페이지 상태 :
각 명령을 실행하기 위해 새 프로세스가 작성되므로 chdir이 일반 명령으로 작성된 경우에는 효과가 없습니다. 따라서 Shell에 의해 인식되고 실행됩니다.