Подтвердить что ты не робот

Что именно это делает: exec>> (command)

Я видел здесь и здесь тоже следующую конструкцию:

exec > >(tee -a script.log)

Я знаю, что такое команда tee, и (команда...) обычно означает выполнение command в подоболочке, а exec заменяет текущую оболочку программой, например exec ls (но здесь есть нет команды) и, кроме того, что подразумевается под > >?

Может ли кто-нибудь прояснить этот темный визард?

exec >{space}> (command)

@Seth?:) Любой указатель, где я могу больше узнать об этой магии, будет оценен.:)

4b9b3361

Ответ 1

Он заменяет текущий сеанс bash другим и записывает вывод всех команд в script.log.

Таким образом, вы можете обычно использовать свою оболочку bash, и вы не увидите никакой разницы (в основном), но все выходные будут отображаться на вашем экране и в script.log.

Из exec manpages:

Если задана команда, она заменяет оболочку без создания нового процесса. Если команда не указана, перенаправление может использоваться для изменения текущей среды оболочки.

Магия >(tee -a script.log) создает канал, поэтому вместо записи в файл, подобный нам (в этом случае >> script.log), мы записываем в процесс tee -a script.log, который делает то же самое. По какой-то причине без ведома, использование >> не работает, но запись в именованный канал работает. Источник здесь