Depois de muito mais pesquisa e verificação de código-fonte descobri a razão pela qual estou vendo esse comportamento é que estou executando o bash 3.2. Nesta versão do bash, se você estava executando no modo posix (que acontece quando você executa o bash através de /bin/sh
) e CDPATH
está definido, então cd
não pesquisará o diretório atualmente, a menos que seja explicitamente definido em CDPATH
. Esse comportamento foi incluído para estar de acordo com POSIX.2
( IEEE 1003.2-1992
). Isso reflete o que seu manual especificado no momento . No entanto, para o bash 4.2, eles alteraram o comportamento no modo posix para corresponder ao POSIX.1-2008
atualizado, que agora especifica que cd
sempre deve pesquisar o diretório de trabalho atual, mesmo se CDPATH
não o incluir. Novo manual do Bash agora não inclui mais isso como uma diferença entre os modos posix e non-posix porque não é mais diferente.
Eles fizeram a alteração desabilitando o código que gera um erro se o modo posix estiver ativado, cercando-o com um bloco #if 0
em builtins/cd.def
:
#if 0
/* changed for bash-4.2 Posix cd description steps 5-6 */
/* POSIX.2 says that if '.' does not appear in $CDPATH, we don't
try the current directory, so we just punt now with an error
message if POSIXLY_CORRECT is non-zero. The check for cdpath[0]
is so we don't mistakenly treat a CDPATH value of "" as not
specifying the current directory. */
if (posixly_correct && cdpath[0])
{
builtin_error ("%s: %s", dirname, strerror (ENOENT));
return (EXECUTION_FAILURE);
}
#endif
Eu gostaria que os docs atuais do bash notassem o fato de que versões mais antigas do bash tinham esse comportamento.