Você quer evitar que seja um parâmetro, por isso, tentamos adicionar algo a ele. O diretório atual pode ser acessado com .
, assim a subpasta -
pode ser acessada alternativamente com ./-
.
cd ./-
O motivo pelo qual cd -- -
não funciona é porque isso é implementado de forma diferente se você comparar rm
(consulte man rm
) para cd
(consulte man bash
ou man cd
), cd
tem uma interpretação diferente que vê -
como parâmetro (veja man bash
ou man cd
).
Deve-se notar também que cd
é uma função embutida no shell, como pode ser lido em esta resposta :
cd
is not an external command - it is a shell builtin function. It runs in the context of the current shell, and not, as external commands do, in a fork/exec'd context as a separate process.
Existe um comando cd
externo, mas faz algo totalmente diferente .
Isso explica por que a implementação é diferente, como Bash e Corutils são duas coisas diferentes.
Vamos apenas supor que você não acreditaria nisso, como podemos confirmar isso? Use which
e type
.
$ which cd && type cd
which: no cd in (/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.7.2:/usr/games/bin
cd is a shell builtin
$ which rm && type rm
/bin/rm
/bin/rm is /bin/rm
Veja man which
para mais informações, e man bash
ou man type
para type