Nota: la mia risposta NON è valida nel caso del PO, e si applica solo agli strumenti che seguono la convenzione menzionata di seguito e non nel caso di un file chiamato esattamente solo -
(trattino), che è spesso anche un caso speciale per specificare quella lettura dallo standard è previsto un input. Vedi la risposta accettata
Lasciandolo qui perché contiene informazioni utili per altri casi su cui ci si può imbattere durante la ricerca di risposte.
Double-Dash it!
Utilizzare la --
convenzione standard doppio trattino ( ) per indicare l'ultimo argomento:
less -- -FILENAME
Esempio
$ echo "meh" > -badname
$ less -badname
Number is required after -b
$ less -- -badname # GREAT SUCCESS!
Whhhaattt?
Questo --
argomento deriva da una convenzione supportata dalla maggior parte delle implementazioni delle utilità della shell e degli strumenti da riga di comando e la maggior parte delle shell sosterrà visibilmente la necessità di seguirla quando si implementano gli strumenti CLI.
Raccomandato da Open Group
OpenGroup lo menziona anche nella sezione Impostazioni predefinite descrizione utilità (v6) delle specifiche di base:
Comportamento predefinito: le [...] utility standard che non accettano opzioni, ma che accettano operandi, riconoscono "-" come primo argomento da scartare.
Il requisito per riconoscere "-" è 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.
E nelle Linee guida per la sintassi dell'utilità (v7):
Linea guida 10:
Il primo argomento che non è un argomento opzione 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 '-'.
Consigliato da Bash
Qui, estratto dal manuale di bash, sui suoi builtin che lo supportano:
Salvo diversamente specificato, ciascun comando incorporato documentato in questa sezione come accettazione delle opzioni preceduto da - accetta - per indicare la fine delle opzioni.
I builtin:, true, false e test non accettano opzioni e non trattano - specialmente. Exit, logout, break, continue, let e shift builtin accettano ed elaborano argomenti che iniziano con - senza richiedere -. Altri builtin che accettano argomenti ma che non sono specificati come opzioni di accettazione interpretano argomenti che iniziano con - come opzioni non valide e richiedono - per impedire questa interpretazione.
Nota che l'eco non interpreta - per indicare la fine delle opzioni.
Letture addizionali