Um sinal de menos (aka traço) sozinho não é uma opção, mas um operando (isto é, um argumento que não é uma opção). Por isso, colocar --
antes não tem efeito. O traço é um operando cd -
e ainda um operando cd -- -
. Como outros utilitários padrão, cd
trata um operando como um operando, independentemente de existir --
antes dele.
O cd
comando atribui um significado especial ao operando -
. Qualquer outra coisa é um diretório para o qual mudar. cd -- -a
muda para o diretório chamado -a
, porque -a
não é especial como um operando e --
evita cd
tratá-lo como uma opção. Isso não funciona -
sozinho, o que não é uma opção.
Colocar aspas -
não ajudará, pois isso acabaria passando o operando de -
qualquer maneira.
Seu único recurso é, portanto, encontrar outra maneira de expressar a mesma idéia, ou seja, outro nome para o mesmo diretório. Felizmente, é fácil: se você adicionar ./
antes de um nome de arquivo relativo, ainda significa o mesmo arquivo. O ./
faz uma diferença que é irrelevante no nosso caso: CDPATH
não é consultada quando o nome do diretório começa com /
, ./
ou ../
. Portanto:
cd ./-
Outra maneira, como -
é um diretório, é adicionar um /
depois dele. A adição de um /
no final de um nome de arquivo garante que o arquivo seja tratado como um diretório (em particular, o comando funcionará no próprio diretório e não no link simbólico se o arquivo for um link simbólico para um diretório), mas, caso contrário, fará com que sem diferença Portanto:
cd -- -/
A escrita -/
é sugerida pelo código de conclusão, a propósito, mas no bash, na verdade, só funciona --
antes, o bash não tem um caso especial para cd -/
(o zsh faz).