Duas pistas:
-
Se
CDPATH
for inexistente ou uma string vazia, entãocd SUBDIR
funciona bem e não imprime spew extra. -
O bash manpage diz:
The variable
CDPATH
defines the search path for the directory containingdir
: each directory name inCDPATH
is searched fordir
. Alternative directory names inCDPATH
are separated by a colon (:
). A null directory name inCDPATH
is the same as the current directory, i.e., ''.''.
A manpage parece estar simplificando demais: claramente um nome de diretório nulo (ou seja, uma string vazia) é não exatamente igual a .
, pois CDPATH=.
gera saída extra, mas CDPATH=
faz não. No entanto, como os diretórios nulos são legais em CDPATH
e como um diretório nulo não gera saída extra, podemos, portanto, usar:
# The first entry is intentionally an empty string.
export CDPATH=":~/symlinks"
O teste (com bash 4.4.12) confirma que se comporta como desejado: cd SUBDIR
muda para ./SUBDIR
ao invés de ~/symlinks/SUBDIR
e não imprime spew extra.