Pipeline (software): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m v2.05 - Fixed using WP:WPCleaner (Wikilink uguali alla propria descrizione)
 
(8 versioni intermedie di 6 utenti non mostrate)
Riga 1:
{{F|sistema operativo|febbraio 2013}}
[[File:Pipeline-it.svg|thumb|upright=1.3|Una pipeline di tre programmi eseguiti all'interno di un terminale ([[Exempli gratia|e.g.]] bash)|300x300px]]
In [[informatica]], il concetto di '''pipeline''' (in [[lingua inglese|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 ([[Output (informatica)|output]]) sia l'ingresso di quello immediatamente successivo ([[input]]).
 
== Descrizione ==
Le ''pipeline'' più semplici prevedono una semplice linea di componenti, mentre quelle più complesse possono prevedere "biforcazioni" (''[[multiplexer]]'' — elementi con più ingressi — o ''[[Multiplexer#Demultiplexer|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]]'', ''[[Multiplexer#Demultiplexer|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 (informatica)|shell]]'' composito, in cui un programma ''sorgente'' genera un flusso di dati testuali che si propagano attraverso le ''[[pipe (informatica)#Funzione pipe nella Shell|pipe]]'' ("|") tramite una sequenza di [[Filtro (Unix)|filtri]], fino ai ''destinatari'' (che spesso sono [[file]], o il [[terminale (informatica)|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 [[Filtro (Unix)|filtri]] o per visualizzare e manipolare i risultati in un programma interattivo. In molti sistemi, come i discendenti del [[MS-DOS|Microsoft DOS]] e di [[Unix]], l'operazione via ''shell'' è gestita interponendo una barra verticale ("|") fra le invocazioni dei due programmi.
 
== In ambienti [[Unix]] ==
=== Esempi ===
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.<syntaxhighlight lang="bash">cut -d : -f 1 /etc/passwd | grep foo</syntaxhighlight>trova tutti gli utenti in <code>/etc/passwd</code> che hanno la stringa <code>foo</code> all'interno del loro [[nome utente]]. Il comando [[Cut (Unix)|''cut'']] estrae il primo campo di ciascuna linea dal file <code>/etc/passwd</code> e la ''pipe'' passa <nowiki>l'</nowiki>output a ''[[grep]]'', che cerca le linee contenenti <code>foo</code> e le stampa sullo ''standard output''.
 
cut -d : -f 1 /etc/passwd | grep foo
 
trova tutti gli utenti in <code>/etc/passwd</code> che hanno la stringa "<code>foo</code>" all'interno del loro [[nome utente]]. Il comando '''[[Cut (Unix)|cut]]''' estrae il primo campo di ciascuna linea dal file <code>/etc/passwd</code> e la ''pipe'' passa <nowiki>l'</nowiki>''output'' a '''[[grep]]''', che cerca le linee contenenti "<code>foo</code>" e le stampa sullo ''standard output''.
 
Un altro esempio di ''pipeline'', che visualizza sul terminale i numeri da 1 a 13:
 
<syntaxhighlight lang="bash">
while : ; do echo ; done | head -n 13 | nl -ba
</syntaxhighlight>
 
Spesso i filtri costituiscono gli elementi successivi al primo in una ''pipeline''.
Line 27 ⟶ 25:
=== Inizio della ''pipeline'' ===
Programmi che vengono spesso utilizzati per creare il flusso di dati da inviare ad una ''pipeline'':
* <code>[[Find (Unix)|find]]</code> (individua i file con certe caratteristiche)
* <code>[[Cat (Unix)|cat]]</code> (legge un file o un dispositivo)
* <code>[[tail]] -f</code> (legge le righe che vengono aggiunte ad un file)
 
=== Fine della ''pipeline'' ===
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 (Unix)|more]]'' o ''[[Less (Unix)|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.
Line 42 ⟶ 40:
* [[Pipe (informatica)]]
* [[Shell (informatica)]]
 
== Collegamenti esterni ==
* {{FOLDOC|pipe|pipe}}
 
{{Portale|informatica}}
 
[[Categoria:Kernel]]