Workstation online OnWorks Linux e Windows

Logo

Hosting online gratuito per workstation

<Precedenti | Contenuti | Succ.>

Reindirizzamento dell'output standard

Il reindirizzamento I/O ci consente di ridefinire dove va lo standard output. Per reindirizzare l'output standard su un altro file anziché sullo schermo, utilizziamo l'operatore di reindirizzamento ">" seguito dal nome del file. Perché dovremmo volerlo fare? Spesso è utile memorizzare l'output di un comando in un file. Ad esempio, potremmo dire alla shell di inviare l'output di ls comando al file ls-output.txt al posto dello schermo:


[io@linuxbox~]$ ls -l /usr/bin > ls-output.txt

[io@linuxbox~]$ ls -l /usr/bin > ls-output.txt


Qui, abbiamo creato un lungo elenco di / Usr / bin directory e ha inviato i risultati al file

ls-output.txt. Esaminiamo l'output reindirizzato del comando:


[io@linuxbox~]$ ls -l ls-output.txt

-rw-rw-r-- 1 me me 167878 2016/02/01 15:07 ls-output.txt

[io@linuxbox~]$ ls -l ls-output.txt

-rw-rw-r-- 1 me me 167878 2016/02/01 15:07 ls-output.txt


Buono; un bel file di testo di grandi dimensioni. Se guardiamo il file con meno, vedremo che il file

ls-output.txt contiene effettivamente i risultati del nostro comando ls:


[io@linuxbox~]$ meno ls-output.txt

[io@linuxbox~]$ meno ls-output.txt


Ora ripetiamo il nostro test di reindirizzamento, ma questa volta con una svolta. Cambieremo il nome della directory in uno che non esiste:



[io@linuxbox~]$ ls -l /bin/usr > ls-output.txt

ls: impossibile accedere a /bin/usr: nessun file o directory simile

[io@linuxbox~]$ ls -l /bin/usr > ls-output.txt

ls: impossibile accedere a /bin/usr: nessun file o directory simile


Abbiamo ricevuto un messaggio di errore. Questo ha senso poiché abbiamo specificato la directory inesistente /bin/usr, ma perché il messaggio di errore è stato visualizzato sullo schermo invece di essere reindirizzato al file? ls-output.txt? La risposta è che il ls il programma non invia i suoi messaggi di errore allo standard output. Invece, come la maggior parte dei programmi Unix ben scritti, invia i suoi messaggi di errore all'errore standard. Poiché abbiamo reindirizzato solo l'output standard e non l'errore standard, il messaggio di errore è stato comunque inviato allo schermo. Vedremo come

Reindirizzamento dell'output standard


per reindirizzare l'errore standard in appena un minuto, ma prima, diamo un'occhiata a cosa è successo al nostro file di output:



[io@linuxbox~]$ ls -l ls-output.txt

-rw-rw-r-- 1 me me 0 2016/02/01 15:08 ls-output.txt

[io@linuxbox~]$ ls -l ls-output.txt

-rw-rw-r-- 1 me me 0 2016/02/01 15:08 ls-output.txt


Il file ora ha lunghezza zero! Questo perché, quando reindirizziamo l'output con l'operatore di reindirizzamento “>”, il file di destinazione viene sempre riscritto dall'inizio. Dal nostro ls comando non ha generato risultati e solo un messaggio di errore, l'operazione di reindirizzamento è iniziata per riscrivere il file e poi si è interrotta a causa dell'errore, con conseguente suo troncamento. In effetti, se mai avessimo bisogno di troncare un file (o creare un nuovo file vuoto) possiamo usare un trucco come questo:



[io@linuxbox~]$ > ls-output.txt

[io@linuxbox~]$ > ls-output.txt


Utilizzando semplicemente l'operatore di reindirizzamento senza alcun comando che lo precede, verrà troncato un file esistente o verrà creato un nuovo file vuoto.

Quindi, come possiamo aggiungere l'output reindirizzato a un file invece di sovrascrivere il file dall'inizio? Per questo, usiamo l'operatore di reindirizzamento ">>", in questo modo:



[io@linuxbox~]$ ls -l /usr/bin >> ls-output.txt

[io@linuxbox~]$ ls -l /usr/bin >> ls-output.txt


L'utilizzo dell'operatore ">>" comporterà l'aggiunta dell'output al file. Se il file non esiste già, viene creato come se fosse stato utilizzato l'operatore “>”. Mettiamolo alla prova:



[io@linuxbox~]$ ls -l /usr/bin >> ls-output.txt [io@linuxbox~]$ ls -l /usr/bin >> ls-output.txt [io@linuxbox~]$ ls -l /usr/bin >> ls-output.txt [io@linuxbox~]$ ls -l ls-output.txt

-rw-rw-r-- 1 me me 503634 2016/02/01 15:45 ls-output.txt

[io@linuxbox~]$ ls -l /usr/bin >> ls-output.txt [io@linuxbox~]$ ls -l /usr/bin >> ls-output.txt [io@linuxbox~]$ ls -l /usr/bin >> ls-output.txt [io@linuxbox~]$ ls -l ls-output.txt

-rw-rw-r-- 1 me me 503634 2016/02/01 15:45 ls-output.txt


Abbiamo ripetuto il comando tre volte risultando in un file di output tre volte più grande.


Il miglior sistema operativo cloud computing su OnWorks: