Benvenuti a un altro venerdì ...
È ora di conoscere una piccola parte del terminal. Dopo aver riflettuto a lungo ho deciso di creare un post sul flussi standard; Anche se sarà superficiale, penso che sia qualcosa che tutti dovrebbero sapere.
Stream standard
Stream standard È costituito da diversi canali di comunicazione tra l'utente e il terminale. Questi "canali" di ingresso / uscita visualizzano o acquisiscono informazioni quando viene eseguito un comando.
Le 3 connessioni I / O sono: stdin Input standard, stdout Uscita standard, stderr Errore standard.
stdin: input standard
L'input standard è il modo in cui acquisiamo le informazioni da un comando, tramite pipe, reindirizzamento, tastiera, ecc. Lo identifichiamo con il descrittore di file 0.
Un esempio di stdin potrebbe essere:
sort <listato
Prende tutte le informazioni presenti nella lista - in questo caso i numeri scritti in modo casuale - e quando reindirizza il file al comando ls, ordina alfabeticamente la lista numerica. In questo esempio i flag sono impliciti.
stdout: output standard
L'output standard, come suggerisce il nome, mostra l'output di un comando tramite la console. Se scriviamo ls, tutte le informazioni che ci mostra sullo schermo sono lo standard output. È rappresentato dal descrittore 1.
Ora cercherò di istanziare stdin e stdout con uno script scritto in bash, semplicemente perché amo bash hahaha. 🙂
prova.sh
#! / bin / bash if [-t 0]; quindi echo "Stai usando stdout" elif [-t 1]; then echo "Stai usando stdin" else echo "Errore brutale" fi
Ora uno screenshot che mostra come utilizzare lo script. Quando si reindirizza o si utilizza una pipe con lo script use prova -t per sapere se viene eseguito solo lo script stdout, e in caso contrario è ovviamente stdin.
bash test.sh ls | bash test.sh bash test.sh </ etc / passwd
Ricorda di modificare il comando ed esercitati in modo da imparare.
stderr: errore standard
L'errore standard è il modo in cui i programmi visualizzano gli errori o la diagnostica. È rappresentato dal descrittore 2.
Per capire il concetto, questa è la situazione: quando vogliamo salvare un errore di comando, la prima cosa a cui pensiamo è reindirizzare l'output in testo normale.
ls> info.txt
Ciò funzionerebbe, le informazioni sul comando verranno archiviate in un file di testo normale. Ma quando si salva l'errore, non lo memorizza, ma lo mostra sullo schermo e il file di testo normale è vuoto.
Se invece usiamo 2> per indicare di salvare stderr nel file:
ls pippo 2> info.txt
Ora salverà le informazioni sull'errore nel file di testo.
Più Conchiglia consente di memorizzare stderr e stdout in un singolo comando comando con &> dove Foo è una directory inesistente
ls Download Foo &> info.txt
Questo file conterrà le informazioni sull'errore durante l'esecuzione di ls in Foo e elencherà le directory sotto Download.
E infine, cosa lo rende famoso 2> e 1?
Semplice, reindirizza stderr a stdout. Quello & nel mezzo di> e 1 significa che reindirizzerà a stdout. Se non fosse lì, sarebbe qualcosa come ... "reindirizza l'errore al file 1".
E con questo è possibile reindirizzare:
- stdout in un file
- stderr in un file
- da stdout a stderr
- da stderr a stdout
- stderr e stdout in un file
- in particolare
Questo è tutto per le persone di oggi. Leggiamo e ti ringraziamo per essere passato. 😀
Interessante. Grazie ai tuoi tutorial, mi piace molto di più Bash.
Gentile, interessante, tuttavia hai un errore nella riga seguente:
"E quando si reindirizza il file al comando ls", dovrebbe essere "e quando si reindirizza il file al comando sort".
Saluti.
C'è un errore all'inizio del testo, quando indichi il comando "ls", dovrebbe essere "sort":
"Prende tutte le informazioni che sono nell'elenco -in questo caso i numeri scritti in modo casuale-, e quando reindirizza il file al comando ls (qui sarebbe sort)"
Saluti e grazie per aver condiviso il tuo lavoro
Questo è ottimo per cron, dove vuoi che l'output venga cancellato (/ dev / null) ma gli errori siano memorizzati nei file. Inoltre, quando lo faccio, di solito uso il comando date per specificare esattamente quando hanno fallito.
Bash (sh) ha questi strumenti così sviluppati dalla filosofia Unix "fai una cosa e fallo bene"
Ebbene non ho scoperto niente
Haha bene è spiegato abbastanza bene, cosa non hai capito?