Nota: minha resposta NÃO é válida no caso do OP, e somente se aplica a ferramentas que seguem a convenção mencionada abaixo e não no caso de um arquivo chamado exatamente just -
(dash), que geralmente também é um caso especial para especificar essa leitura do padrão entrada é esperada. Veja a resposta aceita.
Deixando isso aqui, pois contém informações úteis para outros casos em que alguém pode se deparar enquanto procura respostas.
Dê um duplo passo!
Use a --
convenção double-dash ( ) padrã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 defende visivelmente que você deve segui-lo ao implemente as ferramentas da CLI.
Recomendado pelo Open Group
O OpenGroup também o menciona na seção Padrões de descrição do utilitário (v6) de sua Especificação básica:
Comportamento padrão: Utilitários [...] padrão que não aceitam opções, mas que aceitam operandos, devem reconhecer "-" como o primeiro argumento a ser descartado.
O requisito para reconhecer "-" é porque os aplicativos em conformidade precisam de uma maneira de proteger seus operandos de quaisquer opções arbitrárias que a implementação possa fornecer como uma extensão. Por exemplo, se o utilitário foo padrão estiver listado como não tendo opções e o aplicativo necessário para fornecer um nome de caminho com um hífen à esquerda, ele poderá fazê-lo com segurança como:
foo -- -myfile
e evite qualquer problema com -m usado como uma extensão.
E nas Diretrizes de sintaxe do utilitário (v7):
Diretriz 10:
O primeiro argumento que não é um argumento de opção deve ser aceito como um delimitador indicando o fim das opções. Quaisquer argumentos a seguir devem ser tratados como operandos, mesmo se começarem com o caractere '-'.
Recomendado por Bash
Aqui, extraído do manual do bash, sobre os componentes internos que o suportam:
Salvo indicação em contrário, cada comando interno documentado nesta seção como opções de aceitação precedido por - aceita - para significar o final das opções.
Os embutidos:, true, false e test não aceitam opções e não tratam - especialmente. A saída, logout, interrupção, continuação, permissão e mudança dos componentes internos aceitam e processam argumentos começando com - sem exigir -. Outros componentes internos que aceitam argumentos, mas não são especificados como opções de aceitação, interpretam argumentos que começam com - como opções inválidas e requerem - para impedir essa interpretação.
Observe que eco não interpreta - para significar o fim das opções.
Leitura Adicional