Ou funcionará se o comando suportar a leitura da entrada padrão (a forma command <file
) ou de um arquivo nomeado na lista de argumentos. Mesmo tcsh
suporta command <file
para que a sintaxe seja razoavelmente portátil; se um dado comando pode ler um arquivo na lista de argumentos (ou entrada padrão) depende do comando; ed(1)
, por exemplo, lê comandos da entrada padrão, portanto não pode ler um arquivo da entrada padrão.
No nível C, um comando que lê da entrada padrão ou de um arquivo nomeado estará fazendo algo como
#include <err.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
FILE *fhandle;
// option processing here ...
if (argc == 0 || strncmp(*argv, "-", (size_t) 2) == 0) {
fhandle = stdin;
} else {
if ((fhandle = fopen(*argv, "r")) == NULL)
err(1, "could not open '%s'", *argv);
}
// read from fhandle here, which is either from stdin or a file ...
}
Alguns comandos exigem que a forma command -
indique uma leitura da entrada padrão, outros o farão automaticamente (como no código acima) quando a lista de argumentos estiver vazia. Caso contrário, o código em ambos os casos estará lidando com fhandle
e não se importa de onde a entrada está vindo (a menos que uma mensagem de erro precise incluir o nome do arquivo, mas que possa ser inserida em uma variável adicional).