我有一个小命令,可以进入 git 存储库的根目录:
cg() {
cd "$(git rev-parse --show-toplevel)"
}
当不在 git 存储库中时,它会执行cd ""
,我认为,它不应该执行任何操作。
但是现在设置后,$CDPATH
这种行为似乎已经改变。而是cd ""
带我到$CDPATH
。
我的问题:这是一个小错误还是记录的/预期的行为?
答案1
cd
这可能是和的行为方式的意外后果CDPATH
(并实现),加上目录路径上允许出现尾随“/”字符(例如/tmp/
(大部分)等同于/tmp
)。
从 <冒号> 分隔的路径名中的第一个路径名开始
CDPATH
(请参阅环境变量部分),如果路径名非空,则测试该路径名的连接是否为 <斜杠> 字符(如果该路径名不是以 <斜杠> 字符结尾),并且目录操作数命名一个目录。
请注意,“如果路径名非空”是指的内容CDPATH
,而不是目录命令的参数cd
,因此这与这里无关。
考虑一下如果指定目录是空字符串。假设CDPATH
设置为“/foo/bar”,并且该目录存在。如果运行cd ""
,cd
内置命令将计算“/foo/bar”+“/”+“”=“/foo/bar/”(这只是指定目录 /foo/bar 的更详细的方式),发现该目录存在,并移动到该目录。