Vraag Hoe cd in een map met deze naam "-2" (beginnend met het koppelteken)?


Ik heb een map met de naam:

-2

Ik wil erin cd-romen maar de cd klaagt:

bash: cd: -2: invalid option

Zonder succes heb ik geprobeerd:

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

Elke oplossing?

Bewerken: geen bestandsbrowsers zoals mc, etc. beschikbaar op de server.


149
2018-01-03 20:29


oorsprong


Gerelateerde vraag over superuser: superuser.com/questions/361573/... - yms


antwoorden:


Ten minste twee manieren:

  1. Gebruik de -- argument.

    cd -- -2
    

    Dit gebruikt een conventie die gebruikelijk is voor GNU-tools en die niets behandelt dat erna verschijnt -- als een opdrachtregeloptie.

    Als een commenter opgemerkt, deze conventie is ook gedefinieerd in de POSIX-standaard:

    Standaardgedrag: Wanneer dit gedeelte wordt weergegeven als "Geen.", Betekent dit dat de implementatie geen opties moet ondersteunen. Standaard hulpprogramma's die geen opties accepteren, maar die wel operanden accepteren, zullen dit herkennen "--" als een eerste argument dat moet worden weggegooid.

    De vereiste om te herkennen "--" is omdat conforme applicaties een manier nodig hebben om hun operanden te beschermen tegen willekeurige opties die de implementatie kan bieden als een extensie. Als de standaard utility-foo bijvoorbeeld geen opties bevat en de toepassing een padnaam met een leidend koppelteken moet geven, kan dit veilig worden gedaan als:

    foo -- -myfile
    

    en vermijd eventuele problemen met -m gebruikt als een extensie.

    net zoals:

    Richtsnoer 10:
      Het argument -- moet worden geaccepteerd als een scheidingsteken dat het einde van de opties aangeeft. Alle volgende argumenten moeten worden behandeld als operanden, zelfs als ze beginnen met de '-' karakter. De -- argument mag niet als een optie of als een operand worden gebruikt.

  2. Geef het pad expliciet op:

    cd ./-2
    

    Dit specificeert het pad dat de huidige map expliciet een naam geeft (.) als uitgangspunt.

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

    Dit zijn variaties op het bovenstaande. Elk aantal van dergelijke variaties kan mogelijk zijn; Ik laat het als een oefening voor de lezer om ze allemaal te ontdekken.


250
2018-01-03 20:32



Het is niet alleen GNU, het is onderdeel van de POSIX-standaard. Zien 1.11 Beschrijving hulpprogramma Standaardwaarden en 12.2 Hulpprogramma's Syntaxisrichtlijnen (richtlijn # 10). Van de cd pagina "De cd nut zal voldoen aan ... sectie 12.2 ". - Dietrich Epp
Nu ben ik gewoon benieuwd naar hoe ik naar een cd met de naam - moet cd! - sergiol
@sergiol Op dezelfde manier. - Michael Hampton♦
@ArtB: Nee. Citeren heeft alleen effect op het splitsen van velden. Zo "hello world" is een argument maar hello world is twee, en "-2" is hetzelfde als -2. - Dietrich Epp
@sergiol: of cd -- -- of cd ./-- zou moeten werken. - Keith Thompson


Dit zou moeten werken:

cd -- -2 

- betekent geen optie meer


48
2018-01-03 20:33





Dit zal werken als '-2' in de huidige map staat.

    cd ./-2

U kunt automatisch aanvullen door te typen - en op tab te drukken.


25
2018-01-04 06:19





cd / home/...../-2 werkt ook. Geef het volledige pad voor toegang.


10
2018-01-04 02:46





Als aanvulling, als u deze map wilt verwijderen / verwijderen, kunt u de volgende opdracht gebruiken:

rm -r -- -2

6
2018-01-04 14:14





Ik weet dat deze vraag al is beantwoord. Als iemand een situatie heeft zoals die van mij, dan is dit voor hen:

Ik heb een Java-app uitgevoerd en deze was op zoek naar een map die begon met <path>, Ik moest dat vervangen door een goed pad voordat ik de app startte. Ik ben echter vergeten dat te doen. De app heeft een map gemaakt met de naam <path>.

ik probeerde te cd <path> - gaf me de fout "-bash: syntaxisfout bij onverwachte token newline" Gebaseerd op de suggestie hier (ik begrijp dat het voor de directory is die begint met - en niet <) die ik heb geprobeerd cd -- <path>. Ik kreeg echter dezelfde foutmelding.

Toen ik het probeerde cd \<path>\ - dit werkte!

Achtergrond informatie:

De symbolen "<" en ">" worden gebruikt om STDIN en STDOUT om te leiden, daarom moeten ze worden geëscaped om de shell ze niet te laten interpreteren als omleidingen.


-1
2017-07-05 14:00