gpt4 book ai didi

linux - shell 如何知道它在哪个目录中?

转载 作者:IT王子 更新时间:2023-10-29 00:45:22 25 4
gpt4 key购买 nike

我一直在试图弄清楚 shell 如何知道你当前所在的目录。我知道有一个环境变量 $PWD 但是当我尝试手动更改它时,它会改变我的shell 在提示符处显示,但 lscd 等命令不受影响。

cd 是一个内部 shell 命令,所以我可以理解它可能会使用存储在 shell 内存中的信息,但是 ls 是外部的并且正在运行 ls 没有任何东西都会给我原来所在的目录,不管我对 $PWD 做了什么。

最佳答案

每个进程都有其自己的 Linux 系统跟踪的当前工作目录。这是操作系统为每个进程管理的信息之一。有一个系统调用 getcwd() 可以检索此目录。

$PWD 环境变量反射(reflect)了 shell 上次检查时 getcwd() 的内容,但更改它实际上并不会更改当前目录。为此,shell 必须在 $PWD 更改时调用 chdir(),但它不会这样做。

这也是 cd 必须是内置 shell 的原因。当你运行一个子进程时,子进程有自己的工作目录,所以如果 cd 是一个可执行文件,那么它对 chdir() 的调用将是无用的,因为那不会更改其父级的工作目录。它只会更改自己的(短暂的)工作目录。因此,cd 是一个内置的 shell,可以避免启动子进程。

关于linux - shell 如何知道它在哪个目录中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3672629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com