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

9

A primeira coisa que notei sobre o Linux foi as diferentes formas de alimentação dados em um comando, eu sei alguns, mas eu não sei quantos estão no total.

as formas que conheço até agora:

tubulação:

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

do teclado com sinal de fim de arquivo:

sort
>gurken
>zucker
>braunkohle

do arquivo:

sort foo

Cadeia HERE (na verdade chamada de documento AQUI):

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

Isso é tudo ou há mais maneiras de fazê-lo, por que existem maneiras diferentes, algumas são redundantes?

    
por sharkant 18.05.2017 / 12:41

2 respostas

9

Pelo menos o seguinte:

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

  2. Entrada padrão: foo | bar ou bar < foo

  3. Arquivo (s): foo *.* (ou abrindo arquivo (s) via código em foo ) †

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

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

  6. AQUI doc: foo << EOF bar EOF

  7. AQUI string: foo <<< bar

  8. Sinais kill -SIGUSR1 $procid

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

† Sim, percebo que o stdin é um arquivo (ou arquivo). E que passar em arquivos como este é realmente o mesmo que passar em opções

    
por 18.05.2017 / 18:41
14

Para começar, sort << HERE e assim por diante não é uma string here. Isso é um documento aqui. A string here usa o operador <<< . Isso é no bash (e alguns outros shells).

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

  1. Entrada padrão e seus redirecionamentos

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

  2. Parâmetros

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

Para resumir, existem duas maneiras gerais:

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

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

Para ambas as maneiras, a resposta é que não há limites. Embora os limites reais vêm com o OS / shell e o próprio aplicativo.

    
por 18.05.2017 / 13:16