Observação: minha resposta é NÃO válida no caso do OP, e só se aplica a ferramentas seguindo a convenção mencionada abaixo e não no caso de um arquivo chamado exatamente -
(traço), que geralmente é também um caso especial para especificar que a leitura da entrada padrão é esperada. Veja a resposta aceita.
Deixando isto aqui, pois contém informações úteis para outros casos em que alguém pode tropeçar enquanto procura por respostas.
Double-Dash!
Use a convenção padrão de duplo traço ( --
) para indicar o último argumento:
less -- -FILENAME
Exemplo
$ echo "meh" > -badname
$ less -badname
Number is required after -b
$ less -- -badname # GREAT SUCCESS!
Whhhaattt?
Esse argumento --
deriva de uma convenção suportada pela maioria das implementações de utilitários de shell e ferramentas de linha de comando, e a maioria dos shells visam visivelmente que você deve segui-lo ao implantar as ferramentas CLI.
Recomendado pelo Grupo Aberto
O OpenGroup também menciona isso nos padrões de descrição do utilitário (v6) seção de sua especificação básica:
Default Behavior: [...] Standard utilities that do not accept options, but that do accept operands, shall recognize "--" as a first argument to be discarded.
The requirement for recognizing "--" is because conforming applications need a way to shield their operands from any arbitrary options that the implementation may provide as an extension. For example, if the standard utility foo is listed as taking no options, and the application needed to give it a pathname with a leading hyphen, it could safely do it as:
foo -- -myfile
and avoid any problems with -m used as an extension.
E nas Diretrizes de Sintaxe do Utilitário (v7 ):
Guideline 10:
The first -- argument that is not an option-argument should be accepted as a delimiter indicating the end of options. Any following arguments should be treated as operands, even if they begin with the '-' character.
Recomendado por Bash
Aqui, extraído do manual do bash, sobre seus recursos internos que o suportam:
Unless otherwise noted, each builtin command documented in this section as accepting options preceded by - accepts -- to signify the end of the options.
The :, true, false, and test builtins do not accept options and do not treat -- specially. The exit, logout, break, continue, let, and shift builtins accept and process arguments beginning with - without requiring --. Other builtins that accept arguments but are not specified as accepting options interpret arguments beginning with - as invalid options and require -- to prevent this interpretation.
Note that echo does not interpret -- to mean the end of options.
Leitura adicional