在 bash 中,有没有一种方法可以组合autocd
和CDPATH
,即转到元素的子目录而无需在目录名称之前CDPATH
输入?cd
例如,如果我有这些目录:
- ~
- 〜/留特
- 〜/洛特/欣茨
- 〜/洛特/昆兹
- 〜/丁格
- 〜/丁格/豪斯
- 〜/丁格/自动
并做
~$ shopt -s autocd
~$ export CDPATH=":~/Leute:~/Dinge"
那么我可以做
~$ Leute
并最终进入 ~/Leute 目录(就是这样autocd
)
~/Leute$
我可以做
~/Leute$ cd Auto
最终进入 ~/Dinge/Auto (那个CDPATH
东西)
~/Dinge/Auto$
但将两者结合起来似乎行不通。例如,从 ~/Leute 开始,如果没有明确的说明,我无法跳转到 ~/Dinge/Auto cd
:
~/Leute$ Auto
bash: Auto: Command not found...
是否有一个原因?或者还需要其他东西才能使这项工作正常进行吗?
答案1
无论是出于设计还是疏忽,似乎对您是否键入目录名称的测试都不会搜索变量CDPATH
:
execute.cmd.c
, 功能execute_simple_command
:
if (autocd && interactive && words->word && is_dirname (words->word->word))
{
words = make_word_list (make_word ("cd"), words);
xtrace_print_word_list (words, 0);
goto run_builtin;
}
的定义is_dirname
在同一个源文件中:
/* Return 1 if the file found by searching $PATH for PATHNAME, defaulting
to PATHNAME, is a directory. Used by the autocd code below. */
static int
is_dirname (pathname)
char *pathname;
{
char *temp;
int ret;
temp = search_for_command (pathname, 0);
ret = (temp ? file_isdir (temp) : file_isdir (pathname));
free (temp);
return ret;
}
由此看来,似乎autocd
会在 上找到目录,但我用(for )PATH
对其进行了测试并得到了错误。X11
/usr/bin/X11/
X11: No such file or directory