Descrittore di file dello script della shell

Intro

A volte vediamo comandi come questo nella shell:

  • $ ls foo > /dev/null 2>&1

Può essere difficile capire cosa fa questo per la prima volta, quindi questa nota lo spiegherà brevemente.

Ridirezione I/O

Supponiamo di avere ora un semplice file di testo:

A6082>Ridirigere il contenuto del file.

Nell’azione di reindirizzamento di cui sopra, non vediamo alcun output visualizzato sul terminale, perché il comando > reindirizza il contenuto di test.txt aoutput.txt, che è un output standard (stdout).

In contrasto con lo standard output, c’è lo standard error (stdr), per esempio

Si è verificato un errore durante6082>Si è verificato un errore durante il processo di reindirizzamento.

Si è verificato un errore durante il processo di reindirizzamento perché non esiste un file con il nome no_such_file.txt nella directory corrente. In questo caso, anche se viene usato il comando >, non è possibile inserire il contenuto in output.txt, perché non c’è stdout, ma un messaggio di errore stderror.

File Descriptor

File descriptor può essere pensato come un numero intero positivo per un file aperto. Se avete 100 file aperti, avete fondamentalmente 100 descrittori di file corrispondenti.

Nei sistemi Unix/Unix-like, ci sono anche descrittori di file dedicati a stdout e stderr, che, per essere chiari, hanno destinazioni dedicate per l’output di questiper queste destinazioni di uscita:

  • 1: per stdout
  • 2: per stderr

Mettere tutto insieme

Secondo il concetto di cui sopra, se volete scrivere il contenuto di un file conosciuto in un altro file, potete farlo

Ridirigere il contenuto del file in un altro luogo tramitestdout.

L’1 su questo lato rappresenta lo stdout, la cui sintassi è rappresentata come:

  • >

Così quando vedete qualcuno scrivere da.foo > a.bar, sta semplicemente omettendo il

Similmente, per reindirizzare stderr potete fare così:

Ridirigere il messaggio di errore in un’altra posizione tramite stderr.

Se volete reindirizzare sia stdout che stderr alla stessa destinazione, potete farlo

Reindirizza stderr alla stessa posizione di stdout.
  • &1 è usato come riferimento a un descrittore di file id di 1, cioè un riferimento a stdout.
  • 2>&1 significa reindirizzare il contenuto di stderr a stdout.

Summary

  • Di solito ci sono due destinazioni per l’output: stdout e stderr.
  • Possiamo dirigere l’output in posti diversi, ma di solito in un file.
  • Il descrittore del file può essere usato per distinguere tra stdout (1) e stderr (2).
  • comando > output_location è in realtà un’abbreviazione del comando 1> output_location.
  • Possiamo usare & per riferirci ad altri descrittori di file.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.