Mi chiedevo come creare un file denominato come flag, ad esempio, se volessi creare una cartella denominata -a, quali comandi farebbe il trucco?
Ho provato mkdir '-a', mkdir \-ae nessuno dei due ha funzionato. Sono su Ubuntu.
Mi chiedevo come creare un file denominato come flag, ad esempio, se volessi creare una cartella denominata -a, quali comandi farebbe il trucco?
Ho provato mkdir '-a', mkdir \-ae nessuno dei due ha funzionato. Sono su Ubuntu.
Risposte:
Chiama il comando in questo modo:
mkdir -- -a
Ciò --significa che le opzioni finiscono dopo, quindi -avengono interpretate letteralmente e non come un'opzione mkdir. Troverete questa sintassi non solo in mkdir, ma in qualsiasi utility conforme a POSIX tranne per echoe test. Dalla specifica :
L'argomento - dovrebbe essere accettato come delimitatore che indica la fine delle opzioni. Tutti gli argomenti seguenti devono essere trattati come operandi, anche se iniziano con il carattere '-'. L'argomento - non deve essere usato come opzione o come operando.
L'uso --come protezione è consigliato per quasi tutte le azioni in cui hai a che fare con nomi di file e vuoi assicurarti che non infrangano il comando, ad esempio quando sposti i file in un ciclo potresti voler chiamare quanto segue, in modo che un file chiamato -iisn ' t (in?) correttamente analizzato come opzione:
mv -- "$f" new-"$f"
cc -o -myfile -Wall -myfile.ccome esempio solo leggermente inventato. Qualsiasi editor degno di nota dovrebbe essere in grado di salvare su un file chiamato -myfile.cse lo chiedi, ma il compilatore C probabilmente non farà ciò che vuoi quando ti viene dato un tale elenco di opzioni.
cccomando Michael di cui sopra, che ha l' -oopzione per specificare il file di output.
for f in ./*; do... piuttosto chefor f in *; do...
Il modo più semplice che dovrebbe funzionare con qualsiasi programma ragionevole è quello di utilizzare un nome di percorso relativo davanti al -, ad esempio mkdir ./-acreerà una directory chiamata -anella directory di lavoro corrente.
L'esempio più comune di utilizzo di questo "trucco" è quando si desidera rimuovere un file che inizia con un trattino, quindi è possibile farlo rm ./-a.
./è sempre una buona idea: immagina di aver creato un file chiamato -rfe poi di averlo chiamato rm *.
--non è compreso da tutti i comandi, solo alcuni)
--fosse una cosa bash, quindi dovrebbe funzionare per tutti i programmi?
Il motivo per cui mkdir '-a', o mkdir \-anon funziona, è perché entrambi questi metodi (usando virgolette o barre rovesciate) sono usati per prevenire la tua shell (probabilmentebash ) di dare loro un significato speciale. Dal momento -ache non significa nulla di speciale per la shell, questi non hanno alcun effetto sul modo in cui viene passatomkdir .
Per quanto mkdirriguarda, riceve un elenco di argomenti dalla shell e non è in grado di dire se li metti tra virgolette o meno, o se c'è stata una barra rovesciata. Vede solo una discussione -a. Ecco perché hai bisogno di --come spiegato nelle altre risposte.
Oltre alla risposta di "slhck" c'è un altro trucco che a volte funziona:
Metti il nome del file in questione entro 2 set di (diversi) qoutes come "'-a'"o'"-a"' .
Se funziona o meno dipende dal programma, ma è l'ultima risorsa se il programma non supporta la --funzione POSIX .
Il metodo POSIX è sempre preferito in quanto affidabile al 100%.
--per terminare l'elaborazione delle opzioni presuppone inoltre che non sia necessaria alcuna opzione per seguire il nome del file, il che non è sempre il caso.
'-a'o "-a", almeno su sistemi di tipo BSD