Bash
內置命令 cd 和 cd 有什麼區別?
我遇到了一個 Linux 命令,
builtin cd
.
builtin cd
命令和有什麼區別cd
?事實上,我對這種差異進行了一些研究,但我找不到對此有顯著意義的解釋。
該
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
using
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