Как можно отключить файловый дескриптор от любого файла?

Как можно отключить файловый дескриптор от любого файла?

В bash мы можем создать связь между файловым дескриптором и файлом, например, с помощью

exec > /path/to/myfile

который подключает fd 1 к файлу.

Мне было интересно, как мы можем отключить fd от любого файла, подключенного к нему, так, чтобы fd не был подключен ни к одному файлу? Обратите внимание, что /dev/nullи /dev/ttyявляются файлами.

Спасибо.

Моя цель — выяснитьПодключает ли оболочка автоматически файловые дескрипторы 0, 1 и 2 к своему управляющему терминалу?, отключив fd 0, 1 и 2 в bash, перед запуском bashв той же оболочке bash.

решение1

Вам нужно закрыть файловый дескриптор, что в оболочке типа Bourne делается с помощью оператора >&-(по умолчанию fd 1) или <&-(по умолчанию fd 0):

exec >&-
exec 1>&-
exec 1<&-

все они эквивалентны и приводят к close(1)выполнению системного вызова.

Обратите внимание, что, как правило, закрывать файловые дескрипторы 0, 1 и 2 — плохая идея, так как большинство команд ожидают, что они открыты (это их stdin, stdout и stderr), и открытие ими файла может привести к тому, что этот файл непреднамеренно станет их stdin/stdout/stderr, и то, что они выведут на stdout или stderr, может оказаться записанным в эти файлы.

Связанный контент