Un moins (alias tiret) n'est pas à lui seul une option, mais un opérande (c'est-à-dire un argument qui n'est pas une option). Pour cette raison, la mise en --
avant n'a aucun effet. Le tiret est un opérande dans cd -
et toujours un opérande dans cd -- -
. Comme les autres utilitaires standard, cd
traite un opérande comme un opérande, qu'il soit ou non --
devant lui.
La cd
commande attribue une signification spéciale à l'opérande -
. Tout le reste est un répertoire vers lequel basculer. cd -- -a
bascule vers le répertoire appelé -a
, car -a
n'est pas spécial comme opérande et --
empêche cd
de le traiter comme une option. Cela ne fonctionne pas -
seul, ce qui n'est pas une option.
Mettre des guillemets -
ne va pas aider, car cela finirait par passer l'opérande de -
toute façon.
Votre seul recours est donc de trouver une autre manière d'exprimer la même idée, c'est-à-dire un autre nom pour le même répertoire. Heureusement, il y en a un simple: si vous ajoutez ./
avant un nom de fichier relatif, cela signifie toujours le même fichier. Le ./
fait une différence qui n'est pas pertinente dans notre cas: CDPATH
n'est pas consulté lorsque le nom du répertoire commence par /
, ./
ou ../
. Ainsi:
cd ./-
Une autre façon, puisqu'il -
s'agit d'un répertoire, est d'ajouter un /
après. L'ajout d'un /
à la fin d'un nom de fichier garantit que le fichier est traité comme un répertoire (en particulier, la commande fonctionnera sur le répertoire lui-même et non sur le lien symbolique si le fichier est un lien symbolique vers un répertoire), mais fait autrement aucune différence. Ainsi:
cd -- -/
Soit -/
dit en passant, l' écriture est suggérée par le code d'achèvement, mais dans bash il ne fonctionne qu'en fait --
avant, bash n'a pas de cas particulier pour cd -/
(zsh le fait).