Come eseguire il cd in una directory con questo nome "-2" (a partire dal trattino)?


169

Ho una directory chiamata:

-2

Voglio inserire il cd ma il cd si lamenta:

bash: cd: -2: invalid option

Senza successo, ho provato:

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

Qualche soluzione?

Modifica: nessun browser di file come mc, ecc. Disponibile sul server.


2
Domanda correlata su superutente: superuser.com/questions/361573/…
yms

Risposte:


272

Almeno due modi:

  1. Usa l' --argomento.

    cd -- -2
    

    Questo usa una convenzione comune agli strumenti GNU che non tratta nulla che appare dopo --come un'opzione da riga di comando.

    Come osservato da un commentatore , questa convenzione è anche definita nello standard POSIX :

    Comportamento predefinito: quando questa sezione è elencata come "Nessuna", significa che l'implementazione non deve supportare alcuna opzione. Le utility standard che non accettano opzioni, ma che accettano operandi, devono riconoscere "--"come primo argomento da scartare.

    Il requisito per il riconoscimento "--"è perché le applicazioni conformi hanno bisogno di un modo per proteggere i loro operandi da eventuali opzioni arbitrarie che l'implementazione può fornire come estensione. Ad esempio, se l'utilità standard foo è elencata come non prendendo opzioni e l'applicazione doveva assegnarle un nome percorso con un trattino iniziale, potrebbe farlo in modo sicuro come:

    foo -- -myfile
    

    ed evitare qualsiasi problema con -m usato come estensione.

    così come :

    Orientamento 10:
    l'argomento --dovrebbe essere accettato come delimitatore che indica la fine delle opzioni. Eventuali argomenti seguenti devono essere trattati come operandi, anche se iniziano con il '-'carattere. L' --argomento non deve essere usato come opzione o come operando.

  2. Specificare il percorso esplicitamente:

    cd ./-2
    

    Questo specifica il percorso che nomina esplicitamente la directory corrente ( .) come punto iniziale.

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

    Queste sono variazioni su quanto sopra. Qualsiasi numero di tali variazioni può essere possibile; Lascio che sia un esercizio per il lettore scoprirli tutti.


23
Non è solo GNU, fa parte dello standard POSIX. Vedere 1.11 Impostazioni predefinite descrizione utilità e 12.2 Linee guida per la sintassi dell'utilità (linea guida n. 10). Dalla cdpagina "L' cdutilità deve essere conforme a ... sezione 12.2".
Dietrich Epp,

Ora sono solo curioso di sapere come eseguire il cd in una directory chiamata -!
sergiol

2
@sergiol Allo stesso modo.
Michael Hampton

1
@ArtB: No. La citazione influisce solo sulla suddivisione dei campi. Quindi "hello world"è un argomento, ma hello worldè due, ed "-2"è lo stesso di -2.
Dietrich Epp,

1
@sergiol: O dovrebbe cd -- --o cd ./--dovrebbe funzionare.
Keith Thompson,

49

Questo dovrebbe funzionare:

cd -- -2 

- non significa più opzioni


26

Funzionerà se '-2' è nella directory corrente.

    cd ./-2

È possibile completare automaticamente digitando - e premendo la scheda.


11

cd /home/...../-2 funziona anche. Dai il percorso completo per accedere.


7

Solo per completare, se si desidera rimuovere / eliminare questa directory è possibile utilizzare il seguente comando:

rm -r -- -2

... e solo per completare, non lo farei mai, piuttosto userò uno strumento grafico come mc o rinominerò prima la directory.
Nick,

-1

So che questa domanda ha già ricevuto risposta. Se qualcuno ha una situazione come la mia, questo è per loro:

Ho eseguito un'app Java e cercavo una directory a partire <path>, dovevo sostituirla con il percorso corretto prima di eseguire l'app. Tuttavia, ho dimenticato di farlo. L'app ha creato una directory chiamata <path>.

Ho provato a cd <path>- mi ha dato l'errore "-bash: errore di sintassi vicino a token inaspettati newline" Sulla base del suggerimento qui (ho capito che è per la directory che inizia con - e non <) ho provato cd -- <path>. Tuttavia, ho avuto lo stesso errore.

Quando ho provato cd \<path>\- ha funzionato!

Informazioni di base:

I simboli "<" e ">" vengono utilizzati per reindirizzare STDIN e STDOUT, pertanto devono essere sottoposti a escape per impedire alla shell di interpretarli come reindirizzamenti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.