Да, в bash вы можете использовать file descriptor
для чтения и / или записи и можете использовать любое число. Однако , поскольку 0 , 1 и 2 используется для STDIN , STDOUT и STDERR , мы избегаем этого.Кроме того, числа больше, чем 9 используются внутри, поэтому мы стараемся их избегать.
Вот как мы можем открыть дескриптор файла, чтобы сделать следующее:
Чтение:
fd<source
Запись:
fd>source
Чтение /Напишите:
fd<>source
, где fd
- это цифра, которая описывает file descriptor
, а source
может быть либо file
, либо даже file descriptor
(хотя вы бы добавили &
перед ним).
Если вы используете exec
для файловых дескрипторов, то это позволяет изменениям вступить в силу в текущей оболочке.В противном случае они являются локальными для функции или цикла.
Пример 1 -
Следующее использование fd будет локальным для цикла while, и вы не сможете использовать его снаружи:
while read line <&3; do
echo $line;
done 3<test.file
Пример 2 -
Следующее использование fd будет видно в текущей оболочке
exec 3<test.file
while read line <&3; do
echo $line;
done