我一直在尝试弄清楚shell如何知道你当前所在的目录。我知道有一个环境变量$PWD,但当我尝试手动更改它时,它只会改变我的shell提示符显示的内容,而像ls和cd这样的命令则不受影响。
cd是一个内部shell命令,因此我可以理解它可能使用存储在shell内存中的信息,但ls是外部命令,然而运行ls而不带任何参数将给我显示原来所在的目录,无论我对$PWD做了什么。
cd是一个内部shell命令,因此我可以理解它可能使用存储在shell内存中的信息,但ls是外部命令,然而运行ls而不带任何参数将给我显示原来所在的目录,无论我对$PWD做了什么。
chdir
实际上确实是一个外部进程。这是因为没有wait
命令,shell仅仅exec
它运行的程序,然后在退出时重新exec
shell。这意味着/bin/chdir
可以简单地执行chdir()
,然后重新exec
shell,从而继承新的CWD。 :) - hobbsls -ld /proc/$$/cwd
(shell将其进程ID替换为$$)。 - Tony Delroy