11.07.2015 Views

Amministrare GNU/Linux - Cia

Amministrare GNU/Linux - Cia

Amministrare GNU/Linux - Cia

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

66 CAPITOLO 2. LA SHELL E I COMANDIsi andrebbe incontro ad una sgradita sorpresa. Quello che avviene con la redirezione infatti èche prima viene creato o troncato il file, e poi ci viene scritto sopra il risultato; il che comportache nell’esempio in questione cat alla lettura di file lo troverebbe vuoto. Nel caso specificocat è in grado di rilevare la situazione anomala e stampare un errore, ma non è detto che altriprogrammi (o versioni non <strong>GNU</strong> di cat) siano in grado di farlo; se ad esempio si fosse usato less(che usato con la redirezione si comporta esattamente come cat) si sarebbe perso il contenutooriginale di file.Per ovviare a questo problema è disponibile un altro operatore di redirezione, “>>”, cheredirige lo standard output su di un file eseguendo però la scrittura in append (una modalità discrittura speciale in cui i dati vengono aggiunti in coda a quelli già presenti). In questo modo sisarebbe potuto realizzare l’aggiunta di informazioni alla fine del file file con il comando:cat addendum >> fileLa redirezione di ingresso ed uscita, per quanto utile, è però marginale rispetto ad una formadi redirezione molto più potente, il cosiddetto pipelining, che usa l’operatore “|”. È questoinfatti quello che ci permette di eseguire la concatenazione dei comandi cui abbiamo accennatoin sez. 2.1.1. Questo operatore infatti permette di collegare l’uscita del comando che lo precedecon l’ingresso del successivo attraverso una pipe, 27 che come indica il nome funziona appuntocome tubo di collegamento fra i due comandi. Questo significa che si può fornire come datiin ingresso ad un comando quelli prodotti in uscita da un altro. Così si possono lanciare insequenza una serie di comandi in cui ciascuno elabora i risultati del precedente, fornendo unrisultato per il successivo.Già questo comincia a farci intuire le capacità intrinseche nel funzionamento della riga dicomando, ad esempio non è più necessario dover inserire in tutti i comandi una opzione perordinare in maniera diversa i risultati, basta inviare questi ultimi con una pipe al programmasort il cui solo scopo è quello di effettuare riordinamenti nelle modalità più varie.ComandoSignificatocmd < file redirige lo standard input: legge l’input del comando cmddal file file.cmd > file redirige lo standard output: scrive il risultato delcomando cmd sul file file.cmd >> file redirige lo standard output: scrive il risultato delcomando cmd accodandolo al contenuto del file file.cmd 2> file redirige lo standard error: scrive gli errori del comandocmd sul file file.cmd1 | cmd2pipelining: redirige lo standard output del comando cmd1cmd > file 2>&1sullo standard input del comando cmd2.redirige lo standard output e lo standard error: scriveerrori e risultati del comando cmd sul file file.cmd1 2>&1 | cmd2 redirige lo standard output e lo standard error delcomando cmd1 sullo standard input del comando cmd2.Tabella 2.4: Principali modalità di redirezione.Vedremo in sez. 2.2 vari esempi di come queste funzionalità possono essere sfruttate percostruire delle vere e proprie catene di montaggio in cui si ottiene un risultato finale attraverso laconcatenazione di molti comandi, concludiamo questa sezione riportando in tab. 2.4 un riassuntodelle principali modalità di redirezione utilizzate nella shell. Comprese alcune delle più esotericheche permettono di redirigere più file.27 che è del tutto analoga alle fifo incontrate in sez. 1.2.1, solo che in questo caso non è associata ad un oggettonel filesystem, ma esiste solo come file descriptor accessibile dall’interno dei processi interessati.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!