Usar -
como um nome de arquivo significa que stdin / stdout é uma convenção que muitos programas usam. Não é uma propriedade especial do nome do arquivo. O kernel não reconhece -
como especial, então qualquer chamada de sistema referente a -
como um nome de arquivo usará -
literalmente como o nome do arquivo.
Com o redirecionamento bash, -
não é reconhecido como um nome de arquivo especial, então o bash usará isso como o nome do arquivo literal.
Quando cat
vê a string -
como um nome de arquivo, trata-a como sinônimo de stdin. Para contornar isso, você precisa alterar a string que cat
vê de tal forma que ela ainda se refere a um arquivo chamado -
. A maneira usual de fazer isso é prefixar o nome do arquivo com um caminho - ./-
ou /home/Tim/-
. Essa técnica também é usada para solucionar problemas semelhantes em que as opções de linha de comando entram em conflito com nomes de arquivos, portanto, um arquivo chamado ./-e
não aparece como a opção de linha de comando -e
em um programa, por exemplo.