Pipeline (software): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
F. Cosoleto (discussione | contributi)
Revisione, ed avviso 'unire'
m v2.05 - Fixed using WP:WPCleaner (Wikilink uguali alla propria descrizione)
 
(48 versioni intermedie di 41 utenti non mostrate)
Riga 1:
{{F|sistema operativo|febbraio 2013}}
{{da unire|pipe}}
[[File:Pipeline-it.svg|thumb|Una pipeline di tre programmi eseguiti all'interno di un terminale ([[Exempli gratia|e.g.]] bash)|300x300px]]
La '''pipeline''' (in inglese, tubo, condotto) è un metodo per trasmettere un flusso di dati da un programma all'altro o fra due processi.
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 ==
A livello utente si incontra nell'uso della [[shell]], dove è spesso conveniente riutilizzare i dati uscenti di un programma come input di un altro, ad esempio per applicare dei [[Filtro (Unix)|filtri]] o per visualizzare e manipolare i risultati in un programma interattivo.
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 (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.
In molti sistemi, come i discendenti del [[MS-DOS|Microsoft DOS]] e di [[Unix]], l'operazione via shell è gestita anteponendo fra i programmi una barra verticale ("|").
 
A livello utente si incontra nell'uso della [[''shell]]'', dove è spesso conveniente riutilizzare i dati uscenti di un programma come inputdati diin 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.
== Pipeline in ambienti [[Unix]] ==
 
== Pipeline inIn ambienti [[Unix]] ==
=== Esempi ===
Nei seguenti esempi di riga di comando lo ''standard output'' deldi 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''.
 
Un altro esempio di ''pipeline'', che visualizza sullasul consoleterminale i numeri da 1 a 13:
cut -d : -f 1 /etc/passwd | grep foo
 
<syntaxhighlight lang="bash">
trova tutti gli utenti in ''/etc/passwd'' che hanno la stringa ''"foo"'' all'interno del loro nome. Il comando '''cut''' prende 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 su standard output.
while : ; do echo ; done | head -n 13 | nl -ba
</syntaxhighlight>
 
Spesso i filtri costituiscono gli elementi successivi al primo in una ''pipeline''.
Un altro esempio di pipeline, che visualizza sulla console i numeri da 1 a 13:
 
=== FineInizio della ''pipeline'' ===
while : ; do echo ; done | head -n 13 | nl -ba
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'' ===
Spesso i filtri costituiscono gli elementi successivi al primo in una pipeline.
Una ''pipeline'' può terminare nei modi che seguono:
* scrivendo il risultato sul terminale;
* effettuando la [[redirezione]] dei dati su 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.
 
=== InizioVoci dellacorrelate pipeline ===
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 ===
Una pipeline termina stampando il risultato sul terminale, [[redirezione|redirigendolo]] su un [[file]], con un pager come [[more]] o [[less]], che permettono di leggere un file o un flusso di dati una pagina alla volta, o anche con [[xargs]], che trasforma un flusso di dati in argomenti sulla riga di comando
 
==Voci correlate==
* [[Filtro (Unix)]]
* [[pipePipe (informatica)]]
* [[shellShell (informatica)]]
 
== Collegamenti esterni ==
* {{da unireFOLDOC|pipe|pipe}}
 
{{Portale|informatica}}
[[Categoria:Sistemi POSIX]]
 
[[Categoria:Sistemi POSIXKernel]]
[[en:Pipeline (Unix)]]
[[ja:&#12497;&#12452;&#12503; (&#12467;&#12531;&#12500;&#12517;&#12540;&#12479;)]]
[[zh:Pipe]]