이 훌륭한 답변 에서 언급했듯이 POSIX 시스템에는 cd
셸 내장 외에도 외부 바이너리 가 있습니다. OS X 10.8에서는 /usr/bin/cd
입니다. cd
자체 작업 디렉토리를 변경 한 후 즉시 종료 되므로 내장처럼 사용할 수 없습니다 . 어떤 목적으로 사용됩니까?
/bin/cd
.
/bin/cd
없습니다 /usr/bin/cd
.
이 훌륭한 답변 에서 언급했듯이 POSIX 시스템에는 cd
셸 내장 외에도 외부 바이너리 가 있습니다. OS X 10.8에서는 /usr/bin/cd
입니다. cd
자체 작업 디렉토리를 변경 한 후 즉시 종료 되므로 내장처럼 사용할 수 없습니다 . 어떤 목적으로 사용됩니까?
/bin/cd
.
/bin/cd
없습니다 /usr/bin/cd
.
답변:
그것은 주로 POSIX 도구 - 가슴 내부와 쉘합니다 (참조 밖에 볼 수 있습니다 확인하는 역할 들을 요구에 대한 POSIX의 이론적 근거를 ).
의 경우 cd
매우 유용하지는 않지만 cd
디렉토리 를 변경하지만 다른 부작용이 있음에 유의하십시오 . 종료 상태를 반환하여 chdir()
해당 디렉토리에 액세스 할 수 있는지 여부를 판별 하고 유용한 이유를 설명하는 유용한 오류 메시지를 출력합니다. chdir()
당신이 할 수 없을 때.
예:
dirs_i_am_able_to_cd_into=$(find . -type d -exec cd {} \; -print)
또 다른 잠재적 부작용은 디렉토리의 자동 마운트입니다.
일부 시스템에서는 표준 셸 내장에 대한 대부분의 외부 명령이 다음과 같은 스크립트에 대한 심볼릭 링크로 구현됩니다.
#! /bin/sh -
"${0##*/}" "$@"
그것은 쉘을 시작하고 내장을 실행하는 것입니다.
GNU와 같은 일부 다른 시스템에는 실제 실행 가능한 명령으로 유틸리티가있어 동작이 셸 내장 버전과 다를 경우 혼동 될 수 있습니다.
cd
명령을 사용할 수 있습니다 . 자동 마운트 가능한 원격 파일 시스템의 가용성을 모니터링하거나 시간이 중요한 작업을 수행하기 전에 유용 할 수 있습니다.
비 내장 CD 명령을 사용할 수있는 사실은 POSIX의 본질적으로 인해 요구 사항 모든 정규 내장 명령이 간부 가족의 명령에 의해 호출 될하기에 env
, find
, nice
, nohup
, time
및 xargs
이러한 명령 중 일부는 자체 내장 명령으로 구현되지 않는 사실에 결합했다.
cd
이 명령과 결합하는 것이 의미가 없기 때문에 의미가 없습니다 . 다음은 다소 유력한 예입니다.
find . -type d -exec cd {} \;
env HOME=/foo cd
break, :, continue, . , eval, exec, exit, export, readonly, return, set, shift, times, trap, unset
동안 외부 명령으로 관련이없는 것이다 cd
명령으로 일부 문서화 된 사용 사례가있는 일반 내장입니다.
경로가 액세스 가능한 디렉토리에 해당하는지 확인하는 것 외에도 cd
실행 파일은 CDPATH
변수를 처리하고 사용하며 , 성공적으로 사용 된 경우 해결 된 디렉토리의 절대 경로를 인쇄합니다 .
$ export CDPATH=/usr
$ echo bin lib | xargs -n 1 cd
/usr/bin
/usr/lib
이것은 매우 유용한 경우가 많지만 일치하는 디렉토리를 검색하기 위해 동일한 논리를 다시 구현하는 것을 절약합니다. 구체적인 유스 케이스는 여러 가능한 상위에서 특정 이름의 첫 번째 기존 디렉토리를 찾는 것입니다.
cd
또한 처리 OLDPWD
를 위해 cd -
,하지만 환경 변수가 이미 사용할 수 있습니다 것이기 때문에이 덜 구체적으로 유용합니다.
/usr/bin/cd
에는 쉘이 내장되어 있지 않습니다 .