Use autocd e CDPATH juntos em um bash?

4

Em um bash, existe uma maneira de combinar autocd e CDPATH , ou seja, ir para um subdiretório de um elemento CDPATH sem digitar cd antes do nome da pasta?

Por exemplo, se eu tiver esses diretórios:

  • ~
  • ~ / Leute
  • ~ / Leute / Hinz
  • ~ / Leute / Kunz
  • ~ / Dinge
  • ~ / Dinge / Haus
  • ~ / Dinge / Auto

e faça

~$ shopt -s autocd
~$ export CDPATH=":~/Leute:~/Dinge"

então eu posso fazer

~$ Leute

e acabam no diretório ~ / Leute (que é a coisa autocd )

~/Leute$

e eu posso fazer

~/Leute$ cd Auto

e acabam em ~ / Dinge / Auto (a coisa CDPATH )

~/Dinge/Auto$

mas combinar os dois parece não funcionar. Por exemplo, começando em ~ / Leute, não consigo pular para ~ / Dinge / Auto sem um cd explícito:

~/Leute$ Auto
bash: Auto: Command not found...

Existe uma razão para isso? Ou há algo mais necessário para que isso funcione?

    
por ospalh 21.07.2015 / 10:23

1 resposta

3

Seja por design ou supervisão, parece que o teste para se você digitou um nome de diretório não pesquisa a variável CDPATH :

execute.cmd.c , função 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;
    }

A definição de is_dirname está no mesmo arquivo de origem:

/* 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;
}

Com isso, parece que autocd encontrará diretórios em PATH , mas testei com X11 (para /usr/bin/X11/ ) e recebi o erro X11: No such file or directory .

    
por 21.07.2015 / 12:40