Utilizando “” para redirecionamento de entrada de um arquivo com comandos que já manipulam arquivos [duplicados]

0

Regularmente, tenho visto a seguinte sintaxe:

awk 'stuff' <file
sort <file

A coisa é, eu costumo escrever:

awk 'stuff' file
sort file

E as coisas funcionam perfeitamente. Então, se ambas as sintaxes são aproximadamente equivalentes (ou são?), Existe algum benefício em usar a sintaxe <file ?

EDITAR

Os threads existentes cobrem algumas das minhas interrogações (usando < implica que o shell abre o arquivo primeiro e então passa como entrada padrão para o comando), mas Eu sinto que alguns permanecem:

  • Conformidade POSIX?
  • É para dissipar qualquer ambiguidade sobre a natureza do argumento file ?
  • É específico para um determinado tipo de shell?
  • É considerado obsoleto?
  • Em termos de desempenho, há uma diferença notável?
  • Qualquer exemplo em que você usaria um contra o outro é bem-vindo.
por Valentin B. 25.10.2016 / 16:12

1 resposta

0

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).

    
por 25.10.2016 / 16:37