Bash scripting - file descriptor: differenze tra le versioni

m
nessun oggetto della modifica
m (rimosso template autori)
mNessun oggetto della modifica
Riga 3: Riga 3:
Su Unix e Unix-like ogni processo che non è avviato in background ha di default tre '''file descriptor''', nella forma di identificativi interi:
Su Unix e Unix-like ogni processo che non è avviato in background ha di default tre '''file descriptor''', nella forma di identificativi interi:
* 0 ('''stdin'''), lo ''standard input'', da cui si leggono gli input (di default quanto scritto dalla tastiera sul terminale associato);
* 0 ('''stdin'''), lo ''standard input'', da cui si leggono gli input (di default quanto scritto dalla tastiera sul terminale associato);
* 1 ('''stdout'''), lo ''standard output'', a cui si inviano tutti i messaggi prodotti (di default sul terminale associato);
* 1 ('''stdout'''), lo ''standard output'', a cui si inviano tutti i messaggi prodotti (di default sul terminale associato), tranne quelli relativi a messaggi d'errore;
* 2 ('''stderr'''), lo ''standard error'', a cui si inviano tutti i messaggi di errore prodotti (di default sul terminale associato).
* 2 ('''stderr'''), lo ''standard error'', a cui si inviano tutti i messaggi di errore prodotti (di default sul terminale associato).
Lo standard input è chiuso per i processi avviati in background.
Lo standard input è chiuso per i processi avviati in background.
Riga 60: Riga 60:


Si noti che leggere in questo modo un file ha senso solo per file non binari, che potrebbero contenere anche il carattere ASCII n. 0, che non può essere memorizzato in una variabile. Inoltre l'istruzione <code>read</code> fallisce se non trova un "a capo", per cui l'ultima riga del file è letta all'interno del ciclo soltanto se termina con un "a capo", altrimenti è necessario controllare se è vuota la variabile dopo il ciclo.
Si noti che leggere in questo modo un file ha senso solo per file non binari, che potrebbero contenere anche il carattere ASCII n. 0, che non può essere memorizzato in una variabile. Inoltre l'istruzione <code>read</code> fallisce se non trova un "a capo", per cui l'ultima riga del file è letta all'interno del ciclo soltanto se termina con un "a capo", altrimenti è necessario controllare se è vuota la variabile dopo il ciclo.
Allo stesso modo:
<pre>
{
  printf %s\\n "$var"
  printf %s\\n "$var2"
  printf %s\\n "$var3"
} > file
</pre>
scrive il contenuto delle variabili nel file, facendole seguire da una riga vuota. È equivalente a:
<pre>
printf %s\\n "$var" > file
printf %s\\n "$var2" >> file # append!
printf %s\\n "$var3" >> file # append!
</pre>
Si noti invece che utilizzando sempre la redirezione <code>></code> per tre volte di fila, si scriverebbe il file sempre dall'inizio, con il risultato che solo l'ultima variabile sarebbe presente nel file al termine delle istruzioni.


==Nuovi file descriptor==
==Nuovi file descriptor==
3 581

contributi