Вопрос

Мое понимание было то, что нельзя контролировать файловый дескриптор (целое число), назначенное ОС при открытии нового файла с использованием Open (). Как тогда можно в Bash Shell для назначения определенного файлового дескриптора, используя команду, как

exec 5>&1

(Полагаю, я мог бы узнать, читая источники Bash ...)

Это было полезно?

Решение

Я верю, что вы правы, что иногда файловые дескрипторы уже могут быть использованы. Я получил это из http://tldp.org/ldp/abs/html/io-redirection.html#ftn.aen17716.

«Использование дескриптора 5 файла может вызвать проблемы. Когда Bash создает дочерний процесс, как с Exec, ребенок наследует FD 5 (см. Заархивированный E-mail Chet Ramey, Тема: Re: файл дескриптор 5 удерживается открытым). Лучше всего оставить эту конкретную ФД только ».

Революция к этому указано в разделе 3.6 пункта 2 Руководства Bash.

Каждое перенаправление, которое может быть предшественнее на номер файлового дескриптора, может быть вместо этого предшествует слово форму {varname}. Отказ В этом случае для каждого оператора перенаправления, кроме> & - и <& -, оболочка выделит дескриптор файла больше 10 и назначает его {varname}. Если> & - или <& - предшествует {varname}, значение varname определяет дескриптор файла для закрытия.

Например

#!/bin/bash

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

Другие советы

Увидеть ДУП2. System Unix System Call.

Кроме того, файловые дескрипторы назначаются последовательно, поэтому, если вы знаете 0, 1, 2, ..., N уже открыты, и ни один из них не был закрыт, следующий будет N + 1.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top