在 bash 中,是否有一种方法可以组合autocd和CDPATH,即转到元素的子目录而无需在目录名称之前CDPATH输入?cd
例如,如果我有这些目录:
\n\n并做
\n\n~$ shopt -s autocd\n~$ export CDPATH=":~/Leute:~/Dinge"\nRun Code Online (Sandbox Code Playgroud)\n\n那么我可以做
\n\n~$ Leute\nRun Code Online (Sandbox Code Playgroud)\n\n并最终进入 ~/Leute 目录(就是这样autocd)
~/Leute$\nRun Code Online (Sandbox Code Playgroud)\n\n我可以做
\n\n~/Leute$ cd Auto\nRun Code Online (Sandbox Code Playgroud)\n\n最终进入 ~/Dinge/Auto (那个CDPATH东西)
~/Dinge/Auto$\nRun Code Online (Sandbox Code Playgroud)\n\n但将两者结合起来似乎不起作用。\n例如,从 ~/Leute 开始,我可以\xe2\x80\x99t 跳转到 ~/Dinge/Auto 而无需显式cd:
~/Leute$ Auto\nbash: Auto: Command not found...\nRun Code Online (Sandbox Code Playgroud)\n\n是否有一个原因?或者还需要其他东西才能使这项工作正常进行吗?
\n无论是出于设计还是疏忽,似乎对您是否键入目录名称的测试都不会搜索变量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;
}
Run Code Online (Sandbox Code Playgroud)
的定义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;
}
Run Code Online (Sandbox Code Playgroud)
由此看来,似乎autocd会在 上找到目录PATH,但我用X11(for /usr/bin/X11/) 对其进行了测试并得到了错误X11: No such file or directory。