命令 CD 起什么作用?

命令 CD 起什么作用?

我没有意识到我打开了大写锁定键,而是CD在 Mac 的命令提示符中输入了内容。令人惊讶的是,它没有出错。

which CD显示/usr/bin/CD。如果我检查该文件,它看起来是这样的:

#!/bin/sh
# $FreeBSD: src/usr.bin/alias/generic.sh,v 1.2 2005/10/24 22:32:19 cperciva Exp $
# This file is in the public domain.
builtin `echo ${0##*/} | tr \[:upper:] \[:lower:]` ${1+"$@"}

我猜这与将大写字母转换为小写字母有关,但${0##*/}对我来说完全不透明。 man CD告诉我“无需手动输入”。有人可以解释一下这个命令吗?

编辑:好的,我刚刚注意到 OSX 的文件系统不区分大小写,因此此文件实际上是/usr/bin/cd。但是如果我cd正常输入,我当然会得到内置函数,因此/usr/bin/cd只有当我输入错误时才会调用它。我仍然想知道它的作用。

答案1

看起来它根本没起什么作用:

Apple 邮件列表链接

“我在这里回忆一些旧事,所以我无法提供非常详细的解释,但 /usr/bin/cd 存在的原因是由于与别名相关的 POSIX 要求,并且能够不通过转义使用别名。但 /usr/bin/cd 是一个无用的脚本,因为如果您在 shell 脚本中运行 cd,目录更改仅适用于脚本运行的子 shell。cd 不能是 shell 脚本。

此外,该脚本是一个通用脚本,因为它可用于许多命令,而不仅仅是 cd。

我注意到/usr/bin/cd我的 10.4 系统上的硬链接数为 15 [...]”

在该主题的后面部分:

“我的一个朋友告诉我“${0##*/}”的意思是“接受命令,但删除其路径”(即将“/usr/bin/cd”转换为“cd”)。”

因此,脚本似乎删除了路径,将结果转换为小写,然后附加原始参数。

答案2

它试图做正确的事情,将你的“cd”命令转换为小写。遗憾的是,这毫无意义,因为它在子 shell 中运行。剩下的就是理解 bash。

相关内容