Remarque: ma réponse n'est PAS valide dans le cas de l'OP, et ne s'applique qu'aux outils suivant la convention mentionnée ci-dessous et pas dans le cas d'un fichier nommé exactement juste -
(tiret), qui est souvent aussi un cas spécial pour spécifier cette lecture à partir de la norme entrée est attendue. Voir la réponse acceptée.
Laissant ceci ici car il contient des informations utiles pour d'autres cas sur lesquels on peut tomber lors de la recherche de réponses.
Doublez-le!
Utilisez la --
convention standard double-dash ( ) pour indiquer le dernier argument:
less -- -FILENAME
Exemple
$ echo "meh" > -badname
$ less -badname
Number is required after -b
$ less -- -badname # GREAT SUCCESS!
Quoi?
Cet --
argument découle d'une convention prise en charge par la plupart des implémentations des utilitaires de shell et des outils de ligne de commande, et la plupart des shells préconisent visiblement de la suivre lors de l'implémentation des outils CLI.
Recommandé par l'Open Group
L'OpenGroup le mentionne également dans la section Default description defaults (v6) de sa spécification de base:
Comportement par défaut: [...] Les utilitaires standard qui n'acceptent pas les options, mais qui acceptent les opérandes, reconnaîtront "-" comme premier argument à ignorer.
La nécessité de reconnaître "-" est due au fait que les applications conformes ont besoin d'un moyen de protéger leurs opérandes de toutes les options arbitraires que l'implémentation peut fournir en tant qu'extension. Par exemple, si l'utilitaire standard foo est répertorié comme ne prenant aucune option et que l'application devait lui donner un chemin d'accès avec un trait d'union, il pourrait le faire en toute sécurité comme suit:
foo -- -myfile
et éviter tout problème avec -m utilisé comme extension.
Et dans les directives de syntaxe utilitaire (v7):
Directive 10:
Le premier argument qui n'est pas un argument d'option doit être accepté comme un délimiteur indiquant la fin des options. Tous les arguments suivants doivent être traités comme des opérandes, même s'ils commencent par le caractère «-».
Recommandé par Bash
Ici, extrait du manuel bash, à propos de ses fonctions internes le supportant:
Sauf indication contraire, chaque commande intégrée documentée dans cette section comme acceptant des options précédée de - accepte - pour signifier la fin des options.
Les fonctions intégrées:, true, false et test n'acceptent pas les options et ne traitent pas - spécialement. Les commandes internes exit, logout, break, continue, let et shift acceptent et traitent les arguments commençant par - sans exiger -. D'autres commandes internes qui acceptent des arguments mais qui ne sont pas spécifiées comme acceptant des options interprètent des arguments commençant par - comme des options non valides et nécessitent - pour empêcher cette interprétation.
Notez que l'écho n'interprète pas - pour signifier la fin des options.
Lecture supplémentaire