[root@MGWSDT_FEWS bin]# type cd
cd is a shell builtin
[root@MGWSDT_FEWS bin]# which cd
/usr/bin/which: no cd in (.:/usr/expect/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/real/RealPlayer:/root/bin)
它说因为cd是内置命令,所以'哪个cd'失败了。
'pwd'也是一个内置命令,为什么'哪个pwd'可以获得它的位置?
[root@MGWSDT_FEWS ~]# type pwd
pwd is a shell builtin
[root@MGWSDT_FEWS ~]# which pwd
/bin/pwd
答案 0 :(得分:1)
了解对于sudo
或任何其他不是内置shell的命令,当命令终止时,shell会在命令运行之前从中断处继续(当然,shell的当前工作目录赢了不要改变。因此,cd
必须是内置的shell;否则,当cd
终止时,shell将返回到同一个旧的当前工作目录。换句话说,子进程(即外部命令)不能更改父进程(即shell)的工作目录。
答案 1 :(得分:0)
cd命令是bash的命令。 (bash内置命令)
你可以在“man bash& find cd”
中找到cd的用法相反,pwd是独立命令。
答案 2 :(得分:0)
内置命令是shell中的内部命令,其优先级高于外部命令(文件)。内置命令的优先级也低于函数,因此如果你有一个与内置命令同名的函数,内置实际上很有用:
function cd {
if [[ $# -gt 0 ]]; then
echo "Changing directory to $1."
builtin cd "$1"
else
echo "Changing to default directory."
builtin cd
fi
}
cd "/some/where"
在内置函数之前首先调用汇总函数,并在二进制命令或文件之前首先调用内置函数。我认为类型命令在解释参数时也会遵循该顺序。
答案 3 :(得分:0)
有几个“命令”重复的实例,但这当然取决于您的安装。如果您有一个名为pwd
的内置shell,那么将使用它,但可能有shell(csh
)没有pwd
作为内置。
printf
是内置于bash
和ksh93
的shell,但不适用于ksh88
或csh
。
另一个(weirder)示例是[
,它是一个内置的shell,但(在某些系统上)是test
的符号链接(也可能是内置的shell)。 / p>
您的安装是为了支持许多shell和其他程序,而不仅仅是bash
。
答案 4 :(得分:0)
cd必须是shell内置的,因为它是一个单独的进程,然后在命令退出后命令的效果会消失。 (见Sakthi Kumar的回答。)
另一方面,其他一些命令如pwd
,test
可用作二进制文件,例如/bin/pwd
,/usr/bin/test
...但是,为了优化,shell已经还在/ bin / bash本身中实现了这些二进制文件,从而避免了创建单独进程的开销。
当您调用pwd
时,shell会调用自己的pwd
实现。您可以使用/bin/pwd
而不仅仅是command pwd
来调用二进制文件pwd
。
答案 5 :(得分:0)
pwd
和echo
等命令是bash-builtins,也可以作为外部命令使用。您可以使用enable
启用/禁用shell内置。
以下示例说明如何以shell-builtin或外部命令pwd
调用/bin/pwd
。
$ type pwd
pwd is a shell builtin
$ which pwd
/bin/pwd
$ enable -n pwd
$ type pwd
pwd is /bin/pwd
$ which pwd
/bin/pwd
$ enable pwd
$ type pwd
pwd is a shell builtin
$ which pwd
/bin/pwd