GNU/Linux >> Linux Esercitazione >  >> Linux

Cinque modi per utilizzare gli operatori di reindirizzamento in Bash

I dati vengono inseriti nel computer tramite stdin (di solito la tastiera) e l'output risultante va a stdout (di solito il guscio). Questi percorsi sono chiamati stream . Tuttavia, è possibile modificare queste posizioni di input e output, facendo in modo che il computer ottenga informazioni da un luogo diverso da stdin o invia i risultati in un luogo diverso da stdout . Questa funzionalità è denominata reindirizzamento .

In questo articolo imparerai cinque operatori di reindirizzamento, incluso uno per stderr . Ho fornito esempi di ciascuno e presentato il materiale in un modo che puoi duplicare sul tuo sistema Linux.

Uscita regolare> operatore

Il redirector di output è probabilmente il più riconosciuto degli operatori. L'output standard (stdout ) è solitamente nella finestra del terminale. Ad esempio, quando digiti la date comando, sullo schermo viene visualizzato l'output di ora e data risultante.

[damon@localhost ~]$ date
Tue Dec 29 04:07:37 PM MST 2020
[damon@localhost ~]$

È tuttavia possibile reindirizzare questo output da stdout da qualche altra parte. In questo caso, reindirizzerò i risultati a un file chiamato specifications.txt . Confermerò che ha funzionato usando il cat comando per visualizzare il contenuto del file.

[damon@localhost ~]$ date > specifications.txt
[damon@localhost ~]$ cat specifications.txt 
Tue Dec 29 04:08:44 PM MST 2020
[damon@localhost ~]$ 

Il problema con il > redirector è che sovrascrive tutti i dati esistenti nel file. A questo punto, ora hai date informazioni in specifications.txt file, giusto? Se digiti hostname > specifications.txt , l'output verrà inviato al file di testo, ma sovrascriverà le informazioni su ora e data esistenti dai passaggi precedenti.

[damon@localhost ~]$ hostname > specifications.txt 
[damon@localhost ~]$ cat specifications.txt 
localhost.localdomain
[damon@localhost ~]$ 

È facile avere problemi con il > redirector sovrascrivendo accidentalmente le informazioni esistenti.

[ I lettori hanno apprezzato anche: 10 comandi Linux di base che devi conoscere ]

Uscita regolare append>> operatore

L'aggiunta >> l'operatore aggiunge l'output al contenuto esistente invece di sovrascriverlo. Ciò consente di reindirizzare l'output da più comandi a un singolo file. Ad esempio, potrei reindirizzare l'output di date utilizzando il > operatore e quindi reindirizzare hostname e uname -r alle specifications.txt file utilizzando >> operatore.

[damon@localhost ~]$ date > specifications.txt
[damon@localhost ~]$ hostname >> specifications.txt 
[damon@localhost ~]$ uname -r >> specifications.txt 
[damon@localhost ~]$ cat specifications.txt 
Tue Dec 29 04:11:51 PM MST 2020
localhost.localdomain
5.9.16-200.fc33.x86_64
[damon@localhost ~]$ 

Nota :Il >> redirector funziona anche su un file vuoto. Ciò significa che potresti plausibilmente

ignora il normale > redirector per ridurre la possibilità di sovrascrivere i dati e fare sempre affidamento su >> reindirizzatore invece. Non è una cattiva abitudine prendere.

Inserimento regolare

Il redirector di input estrae i dati in un flusso da una determinata origine. Di solito, i programmi ricevono il loro input dalla tastiera. Tuttavia, i dati possono essere estratti da un'altra fonte, come un file.

È ora di creare un esempio utilizzando sort comando. Innanzitutto, crea un file di testo chiamato mylist.txt che contiene le seguenti righe:

cat
dog
horse
cow

Osserva che gli animali non elencati in ordine alfabetico.

E se dovessi elencarli in ordine? Puoi inserire il contenuto del file in sort comando utilizzando il < operatore.

[damon@localhost ~]$ sort < mylist.txt 
cat
cow
dog
horse
[damon@localhost ~]$ 

Potresti anche diventare un po' più elaborato e reindirizzare i risultati ordinati a un nuovo file:

[damon@localhost ~]$ sort < mylist.txt > alphabetical-file.txt
[damon@localhost ~]$ cat alphabetical-file.txt 
cat
cow
dog
horse
[damon@localhost ~]$ 

Operatore errore 2> normale

Lo stdout visualizza i risultati attesi. Se vengono visualizzati errori, vengono gestiti in modo diverso. Gli errori sono etichettati come descrittore di file 2 (l'output standard è descrittore di file 1). Quando un programma o uno script non genera i risultati previsti, genera un errore. L'errore viene solitamente inviato allo stdout , ma può essere reindirizzato altrove. Lo stderr l'operatore è 2> (per descrittore di file 2).

Ecco un semplice esempio, usando il ping con errori di ortografia comando:

[damon@localhost ~]$ png
bash: png: command not found...
[damon@localhost ~]$

Ecco lo stesso comando errato con l'output di errore reindirizzato a /dev/null :

[damon@localhost ~]$ png 2> /dev/null
[damon@localhost ~]$ 

Il messaggio di errore risultante viene reindirizzato a /dev/null invece di stdout , quindi nessun risultato o messaggio di errore viene visualizzato sullo schermo.

Nota :/dev/null o il secchio di bit , viene utilizzato come cestino della spazzatura per la riga di comando. L'output indesiderato può essere reindirizzato a questa posizione per farlo semplicemente scomparire. Ad esempio, forse stai scrivendo uno script e vuoi testarne alcune funzionalità, ma sai che genererà errori che non ti interessano in questa fase di sviluppo. Puoi eseguire lo script e dirgli di reindirizzare gli errori a /dev/null per comodità.

Tubo | operatore

Ken Hess ha già un solido articolo sull'uso della pipe | operatore, quindi mostrerò solo una dimostrazione molto veloce qui.

La pipe prende l'output del primo comando e lo rende l'input del secondo comando. Potresti voler vedere un elenco di tutte le directory e file in /etc directory. Sai che sarà un lungo elenco e che la maggior parte dell'output scorrerà fuori dalla parte superiore dello schermo. Il less il comando suddividerà l'output in pagine e potrai quindi scorrere le pagine verso l'alto o verso il basso per visualizzare i risultati. La sintassi è di emettere ls comando per elencare il contenuto di /etc , quindi usa pipe per inviare quell'elenco in less in modo che possa essere suddiviso in pagine.

[damon@localhost ~]$ ls /etc | less

L'articolo di Ken ha molti altri ottimi esempi. Personalmente, mi ritrovo a usare command | less e command | grep string il più spesso.

[ Scarica ora:una guida per l'amministratore di sistema allo scripting Bash. ] 

Concludi

Gli operatori di reindirizzamento sono molto utili e spero che questo breve riepilogo ti abbia fornito alcuni trucchi per manipolare input e output. La chiave è ricordare che il > l'operatore sovrascriverà i dati esistenti.


Linux
  1. Come utilizzare Nginx per reindirizzare

  2. Utilizzare $[ Espr ] invece di $(( Espr ))?

  3. Utilizzare l'estensione .sh o .bash per gli script Bash?

  4. Quale shell dovrei usare:Tcsh Vs Bash??

  5. Modi insoliti per utilizzare le variabili all'interno degli script Bash

Come utilizzare il comando di lettura Bash

Come reindirizzare stderr a stdout in Bash

Come utilizzare gli operatori di test di file Bash in Linux

7 modi per usare il comando Linux Head

7 modi per usare il comando Linux Watch

Cos'è Zsh? Dovresti usarlo?