É um pipeline feito de comandos simples?

0

Do manual de referência do bash

A pipeline is a sequence of simple commands separated by one of the control operators | or |&.

do POSIX 2013

A pipeline is a sequence of one or more commands separated by the control operator |.

Eu sei que o Bash tem muitas extensões para shells POSIX, por exemplo |& .

Mas são os comandos do componente de um pipeline

  • comandos simples ou
  • apenas algum comando (simples, pipeline novamente, lista, composto e função)?

No Bash, os seguintes trabalhos

$ for f in $(ls *); do echo $f; done | cat

mas o primeiro comando do componente do pipeline não é simples, mas composto.

    
por Tim 22.03.2016 / 20:34

2 respostas

5

O manual do Bash 4.4.5 não contém a palavra "simples" da descrição do que um pipeline é composto. O "comando simples" a que você está se referindo provavelmente foi um erro de digitação ou um descuido, ou possivelmente uma sobra de um tempo atrás.

Foi corrigido pelo bash mantenedor em abril de 2014 e atualmente lê:

A pipeline is a sequence of one or more commands separated by one of the control operators | or |&.

Um pipeline pode ser claramente criado a partir de comandos que não são comandos simples (por exemplo, subshells e for loops, que são comandos compostos).

    
por 29.12.2016 / 17:58
1

O manual do bash ( man bash ) nunca incluiu a palavra simple na descrição de um pipeline. Obtenha qualquer um dos arquivos bash-${version}.tar.gz deste site , descompacte e dê uma olhada no arquivo bash-${version}/doc/bash.1 , que é o manual de bash para cada versão.

O que incluiu a palavra simple é o arquivo bashref . No mesmo arquivo baixado e expandido acima, leia bash-${version}/doc/bashref.pdf , que incluiu a palavra simple no ponto 3.2.2 Pipelines até a versão 4.3 do referido manual do bashref.

3.2.2 Pipelines A pipeline is a sequence of simple commands separated by … ‘|’ or ‘|&’.

Que o bashref incluiu essa palavra nunca significou que comandos complexos (em oposição a "simples") foram de alguma forma excluídos de serem usados como parte de um pipeline (incluindo {…} if…then… while…do… e outros) .

Esse texto é um erro simples e não deve ser usado para extrair qualquer conclusão.

    
por 01.01.2017 / 06:35