Come posso evitare un nome di sottodirectory con una e commerciale?


9

Esecuzione di un kornshell e tentativo di attraversare un albero di directory. Vuoi cd in una sottodirectory denominata come segue:

 -3ab_&_-3dc.img

La mia domanda è: come devo scappare dalla e commerciale con questo nome? Ho provato diverse combinazioni di virgolette doppie e barre rovesciate senza successo.

Risposte:


11

Per il &(o quasi qualsiasi altro personaggio, hai due semplici possibilità.

  • Metti virgolette singole intorno a tutto: ' -3ab_&_-3dc.img'
  • Metti una barra rovesciata prima di ogni personaggio problematico: -3ab_\&_-3dc.img

Esistono due eccezioni:

  • Il metodo a virgoletta singola non funziona per una virgoletta singola. La barra rovesciata non è speciale tra virgolette singole, quindi non puoi nemmeno usarla direttamente. Quello che puoi fare è terminare la stringa a virgoletta singola, utilizzare immediatamente la barra rovesciata più la virgoletta singola e riavviare la virgoletta singola. Così, per esempio, se il nome della directory è foo'bar\qux: cd 'foo'\''bar\qux'. Puoi ricordarlo in questo modo: all'interno di virgolette singole, '\''ottieni una sola citazione.
  • Il metodo backslash non funziona per le newline: backslash-newline viene semplicemente ignorato. Devi inserire virgolette singole attorno a una nuova riga.

Puoi anche usare le virgolette doppie, ma poi devi mettere una barra rovesciata prima di alcuni caratteri. Le virgolette singole sono più semplici.

C'è un'ulteriore difficoltà qui, che è che il nome della directory inizia con un trattino. Quel personaggio dice al cdcomando (come quasi ogni comando) che segue un'opzione. Il trattino non è speciale per la shell, ma solo per il comando, quindi le virgolette non lo influenzeranno. Esistono due modi per passare un argomento che inizia con un trattino a un comando senza che sia interpretato come un'opzione:

  • Trova un altro modo di esprimere questo argomento. Per un nome file, l'aggiunta ./in primo piano indica ancora lo stesso file.
  • Metti l'argomento --prima. Questo dice al comando di smettere di cercare opzioni.

Quindi, ecco alcuni modi in cui puoi cambiare in questa sottodirectory:

cd -- '-3ab_&_-3dc.img'
cd -- -3ab_\&_-3dc.img
cd ./-3ab_\&_-3dc.img
cd './-3ab_&_-3dc.img'

Grazie. Pensavo di aver provato anche quel formato, ma ho dimenticato di sfuggire alla e commerciale (come nel tuo terzo esempio). Quando l'ho fatto, ha funzionato.
RCinICT il

5

La e commerciale deve essere evasa, ma il problema che stai riscontrando è probabilmente con la prima -e non con la e commerciale. Il -cd principale creato pensa che tu stia passando opzioni. Puoi aggirare questo problema usando ./:

cd './-3ab_&_-3dc.img'

Il &è sicuramente un problema. Per quanto riguarda il -, dipende dalla shell. Zsh è abbastanza contento cddi una directory che inizia con a -. Comunque Bash non lo è.
Patrick,

Grazie. Pensavo di aver provato anche quel formato, ma ho dimenticato di sfuggire alla e commerciale. Quando l'ho fatto, ha funzionato.
RCinICT il
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.