1
[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' 也是一个内置命令,为什么 'which pwd' 可以得到它的位置?

[root@MGWSDT_FEWS ~]# type pwd
pwd is a shell builtin
[root@MGWSDT_FEWS ~]# which pwd
/bin/pwd
4

6 回答 6

1

了解 forsudo或任何其他不是 shell 内置命令的命令,当命令终止时,shell 会在命令运行之前从中断处继续(当然,shell 的当前工作目录不会改变)。因此,cd必须是内置的 shell;否则,当cd终止时,shell 将返回到相同的旧当前工作目录。换句话说,子进程(即外部命令)不能改变父进程(即shell)的工作目录。

礼貌:https ://bbs.archlinux.org/viewtopic.php?id=127225

于 2013-08-14T07:49:54.677 回答
0

cd 命令是 bash 的命令。(bash内置命令)

您可以在“man bash & find cd”中找到 cd 的用法

相反, pwd 是独立命令。

于 2013-08-14T07:49:57.080 回答
0

有几个“命令”重复的情况,但这当然取决于您的安装。如果你有一个内置的 shell,pwd那么将使用它,但可能有一些 shell ( csh) 没有pwd作为内置的。

printf是内置于bashandksh93但不是 for ksh88or的 shell csh

另一个(更奇怪)的例子是[,它是一个内置的 shell,但(在某些系统上)是一个符号链接test(也可能是一个内置的 shell)。

您的安装是为了支持许多 shell 和其他程序,而不仅仅是bash.

于 2013-08-14T07:56:25.543 回答
0

cd 必须是 shell 内置的,因为它是一个单独的进程,那么在命令退出后,命令的效果就会消失。(见 Sakthi Kumar 的回答。)

另一方面,其他一些命令,如pwd,test可作为二进制文件使用,如/bin/pwd, /usr/bin/test... 但是,为了优化,shell 在 /bin/bash 本身也实现了这些二进制文件,因此避免了创建单独进程的开销.

当你调用时pwd,shell 调用它自己的pwd实现。/bin/pwd您可以使用command pwd而不是仅调用二进制文件pwd

于 2013-08-14T07:56:52.697 回答
0

诸如pwd和之类的命令echo是 bash 内置命令,也可作为外部命令使用。您可以使用enable来启用/禁用 shell 内置函数。

以下示例说明了如何pwd作为 shell-builtin 或作为外部命令调用,即/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
于 2013-08-14T07:59:50.797 回答
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"

总而言之,函数在内置函数之前首先被调用,而内置函数在二进制命令或文件之前首先被调用。我认为 type 命令在解释参数时也会遵循该顺序。

于 2013-08-14T07:55:27.700 回答