Eu quero usar o bash CDPATH
para apontar para um diretório de links simbólicos para diretórios que eu acesso com frequência. No entanto, fazendo:
CDPATH="~/symlinks"
causas cd SUBDIR
para parar de funcionar se ./SUBDIR
e ~/symlinks/SUBDIR
ambos existirem; CDPATH
diretórios têm precedência sobre o diretório de trabalho atual.
Eu tentei corrigir isso usando:
CDPATH=".:~/symlinks"
e isso corrige o problema de precedência, mas agora cd
ing para um subdiretório sempre imprime seu caminho completo:
$ pwd
/foo/bar
$ cd baz
/foo/bar/baz
Isso é um pouco irritante. Eu sei que posso suprimir toda cd
a saída fazendoalias cd='> /dev/null cd'
, mas gosto do caminho sendo impresso para outras CDPATH
entradas (ou ao fazer cd -
). Existe algo melhor que eu possa fazer?
Duas pistas:
Se
CDPATH
for inexistente ou uma string vazia,cd SUBDIR
funcionará bem e não imprimirá spew extra.A página de manual do bash diz:
A página de manual parece simplificar demais: claramente um nome de diretório nulo (ou seja, uma string vazia) não é exatamente o mesmo que
.
geraCDPATH=.
saída extra, masCDPATH=
não. No entanto, como diretórios nulos são válidos emCDPATH
, e como um diretório nulo não gera saída extra, podemos usar:O teste (com bash 4.4.12) confirma que se comporta como desejado:
cd SUBDIR
muda para./SUBDIR
em vez de para~/symlinks/SUBDIR
e não imprime nenhum spew extra.