"cd" 외부 명령의 의미는 무엇입니까?

"cd" 외부 명령의 의미는 무엇입니까?

인용된 바와 같이이것은 훌륭한 답변입니다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 때문입니다.필요하다모든 일반 내장 명령은 envexec 일련의 명령인 , , 및 를 통해 결합될 수 있으며, 그 중 일부는 자체적으로 내장 명령으로 구현되지 않습니다.findnicenohuptimexargs

그러나 이러한 명령과 결합하는 것은 의미가 없으므로 이는 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 -변수가 이미 사용 가능하므로 이는 덜 구체적으로 유용합니다.

관련 정보