Come si inserisce una directory il cui nome è solo un meno?


26

Ho scaricato lessn sul mio server web e decompresso.

Contiene una cartella denominata -. Ho pensato di sapere come affrontarlo, ma non lo so.

Ho provato cd -- -, ma questo non ha l'effetto desiderato. Anche l'uso delle virgolette non sembra influenzarlo. Ho messo delle barre ovunque, inutilmente.

Qual è il modo corretto di cambiare in questa cartella?

Risposte:


34

Vuoi evitare che sia un parametro, quindi proviamo a anteporre qualcosa ad esso. È possibile accedere alla directory corrente con ., quindi è -possibile accedere alla sottocartella in alternativa con ./-.

cd ./-

Il motivo che cd -- -non funziona è perché questo è implementato in modo diverso se si confronta rm(vedi man rm) con cd(vedi man basho man cd), cdha un'interpretazione diversa che vede -come un parametro (vedi man basho man cd).

Va anche notato che cdè una funzione integrata della shell, come si può leggere in questa risposta :

cdnon è un comando esterno - è una funzione integrata nella shell. Funziona nel contesto della shell corrente e non, come fanno i comandi esterni, in un contesto fork / exec'd come processo separato.

C'è un cdcomando esterno , ma fa qualcosa di completamente diverso .

Questo spiega perché l'implementazione è diversa, poiché Bash e Coreutils sono due cose diverse.

Supponiamo che tu non ci creda, come possiamo confermarlo? Usa whiche 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

Vedere man whichper ulteriori informazioni e man basho man typepertype


4
No, "-" è implementato in tutte le utility standard, ma è destinato a terminare le opzioni. "-" da solo non è riconosciuto come opzione ma come directory precedente.
Stéphane Chazelas,

4
Soluzione corretta, ma la spiegazione è errata. È completamente irrilevante che cdsia incorporato. La ragione per cui cd -- -non funziona è che -è un operando, non un'opzione.
Gilles 'SO- smetti di essere malvagio' il

1
su Mac OS X cd -- -ti cambierà in una directory denominata -nella directory corrente. FWIW.
Tim Kennedy,

La maggior parte dei commenti si sono riflessi nella seconda parte del mio post.
Tamara Wijsman,

22

Un segno meno (aka dash) da solo non è un'opzione, ma un operando (ovvero un argomento che non è un'opzione). Per questo --motivo , metterlo davanti non ha alcun effetto. Il trattino è un operando in cd -e ancora un operando in cd -- -. Come altre utility standard, cdconsidera un operando come un operando indipendentemente dal fatto che sia presente --prima.

Il cdcomando assegna un significato speciale all'operando -. Qualcos'altro è una directory in cui passare. cd -- -apassa alla directory chiamata -a, perché -anon è speciale come operando e --impedisce cddi trattarla come un'opzione. Questo non funziona da -solo, che non è un'opzione.

Mettere le virgolette in giro -non aiuta, dal momento che alla fine passerebbe -comunque l'operando .

L'unica soluzione è quindi quella di trovare un altro modo di esprimere la stessa idea, ovvero un altro nome per la stessa directory. Fortunatamente, ce n'è uno semplice: se aggiungi ./prima un nome file relativo, significa sempre lo stesso file. La ./fa la differenza, che è irrilevante nel nostro caso: CDPATHnon viene consultato quando il nome della directory inizia con /, ./o ../. Così:

cd ./-

Un altro modo, poiché -è una directory, è quello di aggiungere un /dopo. L'aggiunta di /a alla fine del nome di un file garantisce che il file sia trattato come una directory (in particolare, il comando opererà sulla directory stessa e non sul link simbolico se il file è un link simbolico a una directory), ma in caso contrario nessuna differenza. Così:

cd -- -/

La scrittura -/è suggerita dal codice di completamento, a proposito, ma in bash in realtà funziona solo con --prima, bash non ha un caso speciale per cd -/(zsh lo fa).


Questo mi fa impazzire, in realtà ho provato cd -- -/, ma a causa dell'esecuzione dell'equivalente di cd -prima, la directory in realtà non esisteva e l'ho interpretata come un altro tentativo fallito.
Der Hochstapler,

5

Qualificarsi con il percorso è un'opzione.

cd ./-

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.