Domanda

La mia comprensione era che non si poteva controllare il descrittore di file (intero) assegnato dal sistema operativo quando si apre un nuovo file utilizzando open (). Allora come è possibile in una shell bash per assegnare un descrittore di file specifico utilizzando un comando come

exec 5>&1

(suppongo ho potuto scoprire leggendo le fonti bash ...)

È stato utile?

Soluzione

Credo che tu abbia ragione che a volte i descrittori di file possono essere già in uso. Ho ricevuto questo da http://tldp.org/LDP/abs /html/io-redirection.html#FTN.AEN17716

"Utilizzo descrittore di file 5 potrebbe causare problemi. Quando Bash crea un processo figlio, come con exec, le eredita bambino fd 5 (vedi Chet Ramey e-mail archiviati, Oggetto: Re: descrittore di file 5 viene tenuto aperto ) Miglior lasciare questa particolare fd da sola. ".

Il solutiont a questo è riportato alla sezione 3.6 paragrafo 2 del manuale bash.

  

Ogni reindirizzamento che può essere preceduto da un numero descrittore di file possono essere invece   preceduto da una parola del modulo {varname}. In questo caso, per ogni operatore di ridirezione   tranne> & - e <& -, la shell allocare una maggiore descrittore di file a 10 e assegnarlo a {} nomevar. Se> & - o <& -. È preceduta da {varname}, il valore della varname definisce il descrittore di file per chiudere

Ad esempio

#!/bin/bash

exec {NEW_STDOUT}>&1
echo "Hello" >&$NEW_STDOUT
exec {NEW_STDOUT}>&-

Altri suggerimenti

Vedere la href="http://www.manpagez.com/man/2/dup2/" rel="nofollow noreferrer"> dup2 chiamata di sistema Unix

Inoltre, i descrittori di file vengono assegnati in sequenza, quindi se conoscete 0, 1, 2, ..., n sono già aperta e nessuno di loro sono stati chiusi, la prossima sarà n + 1.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top