exec и tee в файл журнала: объясните эти команды bash

Я видел это в верхней части моего файла сценария bash:

export LOGFILE=$LOGDIRECTORY/${SCRIPT_NAME}.log exec > >(tee $LOGFILE) exec 2>&1 

Что оно делает? Что такое два процесса exec здесь? Я понимаю, что, сохраняя это так, все результаты выполнения скрипта $LOGFILE в $LOGFILE но я хотел бы понять с точки зрения операторов exec .

One Solution collect form web for “exec и tee в файл журнала: объясните эти команды bash”

В оболочках exec выполняет 1) открытие и перенаправление файлов. 2) фактическое выполнение (замена текущего образа процесса на другой образ процесса).

Эти exec являются перенаправлениями.

Сначала вы перенаправляете ( exec 1> >(tee $LOGFILE) ) дескриптор stdout (1) на канал с подстановкой процесса, подключенный к одновременно выполняемому $LOGFILE который имеет $LOGFILE качестве первого аргумента, а затем перенаправляет дескриптор stderr ( 2) в том же месте, где теперь указывает дескриптор 1 (тройник).

Помня о том, что filedescriptors унаследованы, вы только что сделали все последующие stdout и stderr в процессе tee , который записывает его в $LOGFILE и туда, где указатель filedescriptor 1 указал на первоначально (возможно, ваш терминал).


Примечание: процесс tee выводит на исходный stdout (= исходный filedescriptor 1), потому что, поскольку вы можете узнать из / search bash (1) для Simple Command Expansion и Process Substitution , происходит замещение процесса ( >() <() ) ( наряду с другими расширениями), прежде чем переназначения будут выполнены, что означает, что перенаправление в exec 1> >(tee "$LOGFILE") происходит после начала tee , оставляя tee с тем же filedescriptor 1, который он унаследовал от родительской оболочки. (Если бы это было наоборот, tee был бы сделан для записи на свой собственный вход, что могло бы сделать его тупиковым, в зависимости от его шаблона ввода-вывода).

  • Не можете использовать! $ В скрипте?
  • Черточки в printf
  • Запустить тест, прочитанный в bash
  • Понять порядок команд в bash, когда задействованы функции
  • Прерывание бесконечного цикла while с чтением
  • Выполнить файл в приложении на основе расширения файла в bash
  • Не удалось выполнить скрипт bash через cron / crontab
  • Amigados назначает команду в linux bash
  • используя чтение внутри if clause - bash
  • Как использовать команду «if» для нескольких условий?
  • «Нет такого файла или каталога» при сравнении чисел в bash
  • Linux и Unix - лучшая ОС в мире.