Usar -
como nome de arquivo para significar stdin / stdout é uma convenção usada por muitos programas. Não é uma propriedade especial do nome do arquivo. O kernel não reconhece -
como especial, portanto, qualquer chamada do sistema que se refere a -
um nome de arquivo será usada -
literalmente como o nome do arquivo.
Com o redirecionamento do bash, -
não é reconhecido como um nome de arquivo especial; portanto, o bash o usará 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 maneira que 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 nos quais as opções de linha de comando se chocam com os nomes de arquivo; portanto, um arquivo chamado ./-e
não aparece como a -e
opção de linha de comando de um programa, por exemplo.