在 bash 中一起使用 autocd 和 CDPATH 吗?

在 bash 中一起使用 autocd 和 CDPATH 吗?

在 bash 中,有没有一种方法可以组合autocdCDPATH,即转到元素的子目录而无需在目录名称之前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

相关内容