Quantas maneiras existem no total para alimentar um comando com entrada?

9

A primeira coisa que notei no Linux foram as diferentes maneiras de inserir dados em um comando. Conheço alguns, mas não sei quantos existem no total.

as maneiras que eu sei até agora:

tubulação:

echo -e "zorro\nwurst\nlahmacun\nsozialhilfe" | sort

do teclado com sinal de fim de arquivo:

sort
>gurken
>zucker
>braunkohle

De arquivo:

sort foo

Cadeia HERE (na verdade chamada documento HERE):

sort << HERE
>wasserkopf
>elternzeit
>schuldeingeständnis
>währungsreform
>alabasterhaut
HERE

Isso é tudo ou há mais maneiras de fazer isso, por que existem maneiras diferentes? Existem algumas maneiras redundantes?

tubarão
fonte

Respostas:

9

Pelo menos o seguinte:

  1. Opções de comando: foo --bar

  2. Entrada padrão: foo | baroubar < foo

  3. Arquivo (s): foo *.*(ou abrindo arquivo (s) por meio do código foo) †

  4. Exportação do ambiente: export foo=bar; baz

  5. Ambiente (sem exportação): foo=bar bazouenv foo=bar baz

  6. AQUI doc: foo << EOF bar EOF

  7. AQUI string: foo <<< bar

  8. Signals kill -SIGUSR1 $procid

  9. Toda uma variedade de comunicações entre processos , como soquetes, TCP, arquivos mapeados na memória

† sim, eu sei que stdin é um arquivo (ou semelhante a um arquivo). E que passar arquivos como esse é realmente o mesmo que passar opções

Neil McGuigan
fonte
1
Você pode adicionar foo < barcomo uma variante adicional (arquivo via stdin)
Hagen von Eitzen 18/17
14

Para começar, sort << HEREe assim por diante não é uma string aqui. Esse é um documento aqui. A string here usa o <<<operador Isso está no bash (e em algumas outras conchas).

Em geral, existem duas maneiras. Um é através da entrada padrão (e redirecionamentos) e o outro é através de parâmetros.

  1. Entrada padrão e seus redirecionamentos

    Este é o fluxo que, por padrão, está conectado ao terminal, no qual um comando é executado e está associado ao fd (descritor de arquivo) 1. Ele é alimentado com o que for digitado no terminal. Embora (a entrada) possa ser redirecionada como usando o pipe |ou usando os documentos here ou here-strings. Então a entrada não vem do terminal, mas é anexada à saída padrão do comando que precede o tubo. Os shells diferentes têm redirecionamentos diferentes, portanto, para esta categoria, você deve verificar a documentação do shell. Procure por redirecionamentos de entrada.

  2. Parâmetros

    Isto é o que no seu exemplo é sort foo. Ao chamar um programa ou uma função, você passa um ou mais parâmetros. Um arquivo local é apenas uma possibilidade. O parâmetro pode conter uma URL ou qualquer outra coisa. As opções aqui são infinitas.

Em resumo, existem duas maneiras gerais:

  • o primeiro abstrai da lógica interna do aplicativo e manipula a entrada padrão no nível do SO / shell,

  • enquanto o segundo envolve as entranhas do aplicativo, e são elas que oferecem possibilidades ilimitadas, baseando-se nos parâmetros de chamada como uma interface.

Nos dois sentidos, a resposta é que não há limites. Embora os limites reais venham com o OS / shell e o próprio aplicativo.

Kusalananda
fonte