gpt4 book ai didi

linux - cd ./命令在 Bash 中究竟是如何工作的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:42:59 29 4
gpt4 key购买 nike

我很好奇,当我在 bash 中使用 cd 命令时,命令

cd foobar

cd ./foobar

以同样的方式工作。我知道 ./指的是当前的 catalogue 目录,但是为什么“cd foobar”会起作用呢?它只是默认设置,当我不在开头编写 ./ 时,程序会自行添加它,还是更复杂?

最佳答案

bash 中的 cd 命令(有点间接,如下所述)调用 chdir() 系统调用,behavior of which is specified by POSIX . cd shell 命令本身 also has a POSIX specification for its behavior ,可能比可访问/可读的定义更详细。

是的,所有操作(不仅是 chdir(),还有 fopen() 等)的默认值都是当前工作目录。

这不是特定于 bash,而是操作系统级别的行为:“当前工作目录”是关于内核跟踪的每个进程的元数据的一部分,并影响对内核发出的文件系统级别的请求:任何任何语言的程序都可以调用 chdir("foo")open("foo", O_RDONLY),行为将是寻找 foo 在当前目录中,从父进程继承或使用先前的 chdir() 调用修改。


也就是说,对于 bash 而言,cd ./foo 比仅仅 cd foo 更具体:前者表示您显式 想要当前工作目录的 foo 子目录。在 bash 中,如果设置了 CDPATH shell 变量,则 cd foo 将查找其中列出的所有目录,而 cd ./foo 明确只在当前工作目录下请求 foo

试试这个实验:

# setup
tempdir=$(mkdir -d "${TMPDIR:-/tmp}/cdpath-test.XXXXXX")
mkdir -p "$tmpdir/i-am-a-test-directory"
CDPATH=".:$tempdir"

# this works, because CDPATH is honored
cd /
cd i-am-a-test-directory

# this does not, because you're explicitly asking for a directory that does not exist
cd /
cd ./i-am-a-test-directory

# cleanup
rm -rf "$tempdir"
unset CDPATH

关于linux - cd ./命令在 Bash 中究竟是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34998152/

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