태그 보관물: command

command

`cd` 외부 명령의 요점은 무엇입니까? 이 훌륭한 답변 에서 언급했듯이 POSIX

이 훌륭한 답변 에서 언급했듯이 POSIX 시스템에는 cd셸 내장 외에도 외부 바이너리 가 있습니다. OS X 10.8에서는 /usr/bin/cd입니다. 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 명령을 사용할 수있는 사실은 POSIX의 본질적으로 인해 요구 사항 모든 정규 내장 명령이 간부 가족의 명령에 의해 호출 될하기에 env, find, nice, nohup, timexargs이러한 명령 중 일부는 자체 내장 명령으로 구현되지 않는 사실에 결합했다.

cd이 명령과 결합하는 것이 의미가 없기 때문에 의미가 없습니다 . 다음은 다소 유력한 예입니다.

find . -type d -exec cd {} \;
env HOME=/foo cd


답변

경로가 액세스 가능한 디렉토리에 해당하는지 확인하는 것 외에도 cd실행 파일은 CDPATH변수를 처리하고 사용하며 , 성공적으로 사용 된 경우 해결 된 디렉토리의 절대 경로를 인쇄합니다 .

$ export CDPATH=/usr
$ echo bin lib | xargs -n 1 cd
/usr/bin
/usr/lib

이것은 매우 유용한 경우가 많지만 일치하는 디렉토리를 검색하기 위해 동일한 논리를 다시 구현하는 것을 절약합니다. 구체적인 유스 케이스는 여러 가능한 상위에서 특정 이름의 첫 번째 기존 디렉토리를 찾는 것입니다.

cd또한 처리 OLDPWD를 위해 cd -,하지만 환경 변수가 이미 사용할 수 있습니다 것이기 때문에이 덜 구체적으로 유용합니다.


답변