나는 Linux 명령을 발견했습니다 builtin cd
.
명령 builtin cd
과 의 차이점은 무엇입니까 cd
?
사실 이 차이에 대해 몇 가지 조사를 해봤지만 이에 대한 의미 있고 의미 있는 설명을 찾을 수 없었습니다.
답변1
이 cd
명령은 내장 명령이므로 일반적 builtin cd
으로 와 동일한 작업을 수행합니다 cd
. 그러나 cd
함수나 별칭으로 재정의하면 차이가 있는데, 이 경우 cd
함수/별칭은 호출되지만 builtin cd
디렉터리는 계속 변경됩니다. 즉, 내장된 접근성은 소멸되더라도 그대로 유지됩니다. 기능으로.)
예를 들어:
user:~$ cd () { echo "I won't let you change directories"; }
user:~$ cd mysubdir
I won't let you change directories
user:~$ builtin cd mysubdir
user:~/mysubdir$ unset -f cd # undefine function
또는 별칭을 사용하세요.
user:~$ alias cd='echo Trying to cd to'
user:~$ cd mysubdir
Trying to cd to mysubdir
user:~$ builtin cd mysubdir
user:~/mysubdir$ unalias cd # undefine alias
을 사용하는 것은 특정 작업을 수행하는 함수를 정의하는 좋은 방법 builtin
이기도 합니다.cd
그리고디렉토리 변경( cd
이 디렉토리에서 호출하면 무한 재귀로 함수가 다시 호출되기 때문입니다.)
예를 들어:
user:~ $ cd () { echo "Changing directory to ${1-home}"; builtin cd "$@"; }
user:~ $ cd mysubdir
Changing directory to mysubdir
user:~/mysubdir $ cd
Changing directory to home
user:~ $ unset -f cd # undefine function
답변2
대부분의 경우에는 차이가 없습니다(아래 참조). 이 cd
명령은 모든 쉘에 내장된 명령입니다. 외부 명령은 쉘이 호출되는 환경을 변경할 수 없으므로 내장 1이 필요합니다. 작업 디렉토리를 변경하면 해당 환경이 변경됩니다.
이 bash
명령은 builtin
동일한 이름을 가진 쉘 함수, 별칭 또는 외부 명령이 있더라도 쉘이 명령의 내장 버전을 사용하도록 강제합니다.
일부 경우에예예 cd
를 들어 ,builtin cd
아니요그냥 그렇게 부르세요. 사용은 builtin cd
사용자가 셸 함수나 별칭을 통해 추가할 수 있는 오버로드된 기능을 우회합니다.
예:
내장 명령은 cd
힌트를 업데이트하는 함수로 인해 오버로드될 수 있습니다.
cd() {
builtin cd "$@" && PS1=$(__update_prompt)
}
그 중에는 __update_prompt
문자열을 출력하는 다른 사용자 제공 함수도 있습니다.
함수 는 builtin cd
재귀적으로 호출되지 않습니다. 함수가 활성화된 쉘에서 사용될 때는 builtin cd
함수가 호출되지 않습니다 .
1 외부 명령이 있는 Unices가 있습니다 cd
(macOS, 그리고 저는 Solaris를 믿습니다). 이 명령의 목적은할 수 없다cd
쉘의 작업 디렉토리를 변경하는 것은 사용 가능한 외부 유틸리티 중 하나를 나열하는 POSIX 표준을 충족하기 위해 수행될 수 있습니다 ( cd
"특수 내장 유틸리티" 중 하나가 아님). 또한 작업 디렉터리가 지정된 디렉터리로 변경되었는지 확인하는 테스트로도 작동합니다.가능할 것이다.