인용된 바와 같이이것은 훌륭한 답변입니다cd
, POSIX 시스템에는 내장 셸 외에 외부 바이너리가 있습니다. OS X 10.8에서는 자체 작업 디렉토리를 변경한 후 즉시 종료되므로 /usr/bin/cd
내장 프로그램처럼 사용할 수 없습니다 . cd
그 목적은 무엇입니까?
답변1
이는 주로 POSIX 도구 상자를 셸 내부와 외부 모두에서 사용할 수 있도록 하는 데 사용됩니다(참조POSIX에서 이를 요구하는 이유).
이는 에 cd
그다지 유용하지는 않지만 cd
디렉터리를 변경하면 다른 부작용이 있다는 점에 유의하세요. 디렉터리에 chdir()
액세스할 수 있는지 여부를 결정하는 데 도움이 되는 종료 상태를 반환하고, 디렉터리에 액세스할 수 없는 이유를 설명하는 유용한 오류 메시지를 출력합니다 chdir()
. 당신은 할 수 없을 때.
예:
dirs_i_am_able_to_cd_into=$(find . -type d -exec cd {} \; -print)
또 다른 잠재적인 부작용은 디렉토리의 자동 마운트입니다.
일부 시스템에서는 표준 셸 내장에 대한 대부분의 외부 명령이 동일한 스크립트에 대한 기호 링크로 구현됩니다.
#! /bin/sh -
"${0##*/}" "$@"
이는 쉘을 시작하고 그 안에 내장된 명령을 실행하는 것입니다.
일부 다른 시스템(예: GNU)은 유틸리티를 실제 실행 가능한 명령으로 취급하므로 동작이 셸 내장 버전과 다를 때 혼동을 일으킬 수 있습니다.
답변2
내장되지 않은 cd 명령을 사용할 수 있다는 사실은 본질적으로 POSIX 때문입니다.필요하다모든 일반 내장 명령은 env
exec 일련의 명령인 , , 및 를 통해 결합될 수 있으며, 그 중 일부는 자체적으로 내장 명령으로 구현되지 않습니다.find
nice
nohup
time
xargs
그러나 이러한 명령과 결합하는 것은 의미가 없으므로 이는 cd
의미가 없습니다. 그러나 다소 방어 가능한 예는 다음과 같습니다.
find . -type d -exec cd {} \;
env HOME=/foo cd
답변3
경로가 액세스 가능한 디렉터리에 해당하는지 확인하는 것 외에도 cd
실행 파일은 CDPATH
변수를 처리하고 사용합니다.인쇄할 것이다성공적으로 사용된 경우 확인된 디렉터리의 절대 경로입니다.
$ export CDPATH=/usr
$ echo bin lib | xargs -n 1 cd
/usr/bin
/usr/lib
이는 가끔씩만 유용하지만 일치하는 디렉터리를 검색하는 데 사용되는 동일한 논리를 다시 구현하지 않아도 됩니다. 특정 사용 사례는 가능한 여러 상위 디렉터리 아래에서 특정 이름의 첫 번째 기존 디렉터리를 찾는 것입니다.
cd
또한 처리되지만 OLDPWD
환경 cd -
변수가 이미 사용 가능하므로 이는 덜 구체적으로 유용합니다.