Pipeline software

Da Wikipedia, l'enciclopedia libera.
Una pipeline di tre programmi eseguiti all'interno di un terminale (e.g. bash)

In informatica, il concetto di pipeline (in inglese, tubatura — composta da più elementi collegati — o condotto) viene utilizzato per indicare un insieme di componenti software collegati tra loro in cascata in modo che il risultato prodotto da uno degli elementi sia l'ingresso di quello immediatamente successivo.

Descrizione[modifica | modifica wikitesto]

Le pipeline più semplici prevedono una semplice linea di componenti, mentre quelle più complesse possono prevedere "biforcazioni" (multiplexer — elementi con più ingressi — o demultiplexer — elementi con più uscite). Una pipeline inizia con uno o più elementi sorgenti (che non hanno ingressi, ma solo uscite), i cui dati fluiscono attraverso tutti gli altri elementi intermedi (multiplexer, demultiplexer, filtri — che manipolano questo flusso di dati — e convertitori — che modificano il formato del flusso di dati) fino agli elementi destinatari (che non hanno uscite ma solo ingressi).

L'accezione più comune della parola pipeline indica un comando di shell composito, in cui un programma sorgente genera un flusso di dati testuali che si propagano attraverso le pipe ("|") tramite una sequenza di filtri, fino ai destinatari (che spesso sono file, o il terminale). Questi programmi sono collegati tra loro tramite l'operatore pipe, che in una riga di comando significa che lo standard output del programma a sinistra dell'operatore va passato allo standard input del programma alla sua destra.

A livello utente si incontra nell'uso della shell, dove è spesso conveniente riutilizzare i dati uscenti di un programma come dati in ingresso a un altro, ad esempio per applicare dei filtri o per visualizzare e manipolare i risultati in un programma interattivo.

In molti sistemi, come i discendenti del Microsoft DOS e di Unix, l'operazione via shell è gestita interponendo una barra verticale ("|") fra le invocazioni dei due programmi.

Pipeline in ambienti Unix[modifica | modifica wikitesto]

Esempi[modifica | modifica wikitesto]

Nei seguenti esempi di riga di comando lo standard output di un programma a sinistra dell'operatore per la pipe è passato allo standard input del programma alla sua destra.

 cut -d : -f 1 /etc/passwd | grep foo

trova tutti gli utenti in /etc/passwd che hanno la stringa "foo" all'interno del loro nome utente. Il comando cut estrae il primo campo di ciascuna linea dal file /etc/passwd e la pipe passa l'output a grep, che cerca le linee contenenti "foo" e le stampa sullo standard output.

Un altro esempio di pipeline, che visualizza sul terminale i numeri da 1 a 13:

while : ; do echo ; done | head -n 13 | nl -ba

Spesso i filtri costituiscono gli elementi successivi al primo in una pipeline.

Inizio della pipeline[modifica | modifica wikitesto]

Programmi che vengono spesso utilizzati per creare il flusso di dati da inviare ad una pipeline:

  • find (individua i file con certe caratteristiche)
  • cat (legge un file o un dispositivo)
  • tail -f (legge le righe che vengono aggiunte ad un file)

Fine della pipeline[modifica | modifica wikitesto]

Una pipeline può terminare nei modi che seguono:

  • scrivendo il risultato sul terminale;
  • effettuando la redirezione dei dati su di un file;
  • con un pager come ad esempio more o less, che permettono di leggere un file o un flusso di dati una pagina alla volta;
  • con xargs, che trasforma un flusso di dati in parametri sulla riga di comando.

Voci correlate[modifica | modifica wikitesto]