Duas pistas:
-
Se
CDPATHfor inexistente ou uma string vazia, entãocd SUBDIRfunciona bem e não imprime spew extra. -
O bash manpage diz:
The variable
CDPATHdefines the search path for the directory containingdir: each directory name inCDPATHis searched fordir. Alternative directory names inCDPATHare separated by a colon (:). A null directory name inCDPATHis 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.