cd 命令如何工作?(Unix)

Rad*_*dek 6 command-line-interface unix-shell

有人可以向我解释cd -命令是如何工作的吗?man cd 告诉我An argument of - is equivalent to $OLDPWD.然后我在网上发现 $OLDPWD 是 cd 命令设置的以前的工作目录。当我做 cd - 在我的 unix 上我得到-bash: cd: OLDPWD not set这让我感到困惑。

更新:它现在可以工作了,它给了我以前的工作目录。我想我之前没有使用和 cd 命令,所以这就是没有设置 $OLDPWD 的原因。

再问一个问题cd(键入 cd 并按 Enter)是做什么的?我不会这么说的。有没有更好的技术解释?

host [~]# cd
host [~]#
Run Code Online (Sandbox Code Playgroud)

Dav*_*ney 10

OLDPWD 未设置,因为您尚未更改目录

[dave@odessa ~]$ cd -
-bash: cd: OLDPWD not set
[dave@odessa ~]$ cd /tmp
[dave@odessa tmp]$ cd -
/export/home/dave

[dave@odessa ~]$ cd /tmp
[dave@odessa tmp]$ echo $OLDPWD
/export/home/dave
Run Code Online (Sandbox Code Playgroud)

cd不带任何参数将chdir$HOME

[dave@odessa tmp]$ echo $HOME
/export/home/dave
[dave@odessa tmp]$ HOME=/ cd
[dave@odessa /]$ pwd
/
Run Code Online (Sandbox Code Playgroud)


ptm*_*man 6

type cd
Run Code Online (Sandbox Code Playgroud)

告诉我们

cd 是一个内置的 shell

man sh
Run Code Online (Sandbox Code Playgroud)

告诉我们您的发现:

如果将单个破折号指定为参数,它将被 OLDPWD 的值替换。

shell 中 cd 的内部实现会执行chdir(2) -syscall。