Question Comment faire un cd dans un répertoire avec ce nom "-2" (commençant par le tiret)?


J'ai un répertoire nommé:

-2

Je veux cd dedans mais le cd se plaint:

bash: cd: -2: invalid option

Sans succès, j'ai essayé:

cd "-2"
cd '-2'
cd \-2

Toute solution?

Edit: pas de navigateurs de fichiers comme mc, etc. disponibles sur le serveur.


149
2018-01-03 20:29


origine


Question connexe sur le superutilisateur: superuser.com/questions/361573/… - yms


Réponses:


Au moins deux façons:

  1. Utilisez le -- argument.

    cd -- -2
    

    Ceci utilise une convention commune aux outils GNU qui consiste à ne traiter aucun élément apparaissant après. -- en tant qu'option en ligne de commande.

    Comme un commentateur a noté, cette convention est également défini dans le standard POSIX:

    Comportement par défaut: Lorsque cette section est répertoriée comme "Aucune", cela signifie que la mise en œuvre n'a pas besoin de prendre en charge les options. Les utilitaires standard qui n'acceptent pas les options, mais qui acceptent les opérandes, doivent reconnaître "--" comme premier argument à écarter.

    La nécessité de reconnaître "--" En effet, les applications conformes ont besoin d’un moyen de protéger leurs opérandes de toutes les options arbitraires que l’implémentation peut fournir comme extension. Par exemple, si l’utilitaire standard foo est indiqué comme ne prenant aucune option et que l’application doit lui attribuer un chemin avec un trait d’union, elle peut le faire en toute sécurité de la manière suivante:

    foo -- -myfile
    

    et éviter tout problème avec -m utilisé comme une extension.

    aussi bien que:

    Directive 10:
      L'argument -- devrait être accepté comme un délimiteur indiquant la fin des options. Tous les arguments suivants doivent être traités comme des opérandes, même s'ils commencent par le '-' personnage. le -- L'argument ne doit pas être utilisé comme une option ou un opérande.

  2. Spécifiez le chemin explicitement:

    cd ./-2
    

    Ceci spécifie le chemin nommant explicitement le répertoire en cours (.) comme point de départ.

    cd $(pwd)/-2
    cd /absolute/path/to/-2
    

    Ce sont des variations sur ce qui précède. Un nombre quelconque de telles variations peut être possible; Je laisserai au lecteur le soin de tout découvrir.


250
2018-01-03 20:32



Ce n’est pas simplement GNU, cela fait partie de la norme POSIX. Voir 1.11 Valeurs par défaut de la description de l'utilitaire et 12.2 Instructions pour la syntaxe des utilitaires (ligne directrice n ° 10). Du cd page "Le cd l'utilité doit être conforme à ... section 12.2 ". - Dietrich Epp
Maintenant, je suis juste curieux de savoir comment cd dans un répertoire nommé -! - sergiol
@ergiol De la même manière. - Michael Hampton♦
@ArtB: Non. La citation n'affecte que la division du champ. Alors "hello world" est un argument mais hello world est deux, et "-2" est le même que -2. - Dietrich Epp
@ergiol: soit cd -- -- ou cd ./-- devrait marcher. - Keith Thompson


Cela devrait fonctionner:

cd -- -2 

- signifie plus d'option


48
2018-01-03 20:33





Cela fonctionnera si "-2" est dans le répertoire courant.

    cd ./-2

Vous pouvez compléter automatiquement en tapant - et en appuyant sur la touche de tabulation.


25
2018-01-04 06:19





cd /home/...../-2 fonctionne également. Donnez le chemin complet d'accès.


10
2018-01-04 02:46





Pour compléter, si vous souhaitez supprimer / supprimer ce répertoire, vous pouvez utiliser la commande suivante:

rm -r -- -2

6
2018-01-04 14:14





Je sais que cette question a déjà été répondu. Si quelqu'un a une situation comme la mienne, c'est pour lui:

J'ai lancé une application Java et elle cherchait un répertoire commençant par <path>, Je devais remplacer cela par le chemin approprié avant de lancer l’application. Cependant, j'ai oublié de le faire. L'application a créé un répertoire appelé <path>.

j'ai essayé de cd <path> - m'a donné une erreur "-bash: erreur de syntaxe près d'un saut de ligne inattendu" Sur la base de la suggestion ici (je comprends que c’est pour un répertoire commençant par - et non <), j’ai essayé cd -- <path>. Cependant, j'ai la même erreur.

Quand j'ai essayé cd \<path>\ - cela a fonctionné!

Informations d'arrière-plan:

Les symboles "<" et ">" sont utilisés pour rediriger STDIN et STDOUT, ils doivent donc être échappés pour que le shell ne les interprète pas comme des redirections.


-1
2017-07-05 14:00