Как заставить Bash интерпретировать содержимое переменной как перенаправления ввода / вывода, а не просто передавать это содержимое выполняемой команде.Возьмем, к примеру, этот скрипт:
#!/bin/bash
test "$1" == '--log' && LOGGING="2>&1 | tee time.log" || LOGGING=""
date $LOGGING
Желаемое поведение - когда я запускаю этот скрипт с опцией --log, bash выполнит
$ date 2> & 1 |tee time.log
Если я не укажу --log, он просто выводит дату без создания журнала.Вместо этого он передает содержимое $ LOGGING на сегодняшний день в качестве аргумента CLI, что приводит к ошибке:
date: extra operand `|' Try `date
--help' for more information.
Есть ли способ сделать это без написания чего-то вроде
#!/bin/bash
test "$1" == '--log' && date 2>&1 | tee time.log || date
Фактическое приложениеочевидно, это намного сложнее, чем просто вызвать «date», поэтому я бы хотел избежать копирования и вставки этой команды дважды в if if, просто чтобы добавить команды перенаправления и регистрации.