Dans Basile Starynkevitch, la réponse à cette question, le 29 Novembre 2011, il écrit:
Si il est sur Linux, vous pouvez toujours lire le fichier /proc/self/fd/ annuaire pour trouver les utilisé des descripteurs de fichiers.
Ayant fait plusieurs expériences basées sur la lecture de la fd répertoire, je suis arrivé à la suite du code, comme le "plus proche" de ce que je cherchais. Ce que je cherchais était en fait qu'un coup d'un paquebot, comme
my_file_descriptor=$(open_r /path/to/a/file)
qui aurait trouver le plus bas, inutilisé descripteur de fichier ET ouvrez le fichier ET l'affecter à la variable. Comme on le voit dans le code ci-dessous, en introduisant la fonction "lowest_unused_fd", j'ai au moins obtenir un "deux-liner" (FD=$(lowest_unused_fd) suivie par eval "exec $FD<$FILENAME") pour la tâche. Je n'ai PAS été capable d'écrire une fonction qui fonctionne comme (l'imaginaire) "open_r" ci-dessus. Si quelqu'un sait comment faire, s'il vous plaît pas en avant! Au lieu de cela, j'ai dû diviser la tâche en deux étapes: une étape pour trouver le solde non utilisé des descripteurs de fichiers, et un pas à ouvrir le fichier. À noter également que, pour être en mesure de placer le trouvez pas dans une fonction ("lowest_unused_fd") et avoir son stdout attribué à FD, j'ai dû utiliser "/proc/$$/fd" au lieu de "/proc/self/fd" (comme dans Basile Starynkevitch de la suggestion), depuis bash engendre un shell interne est exécuté pour l'exécution de la fonction.
#!/bin/bash
lowest_unused_fd () {
local FD=0
while [ -e /proc/$$/fd/$FD ]; do
FD=$((FD+1))
done
echo $FD
}
FILENAME="/path/to/file"
# Find the lowest, unused file descriptor
#+ and assign it to FD.
FD=$(lowest_unused_fd)
# Open the file on file descriptor FD.
if ! eval "exec $FD<$FILENAME"; then
exit 1
fi
# Read all lines from FD.
while read -u $FD a_line; do
echo "Read \"$a_line\"."
done
# Close FD.
eval "exec $FD<&-"