2013-06-03 3 views
2

Я noticed that с в Perl print, вы можете печатать из строки или из STDIN. У меня есть простая функция, которая может работать из строкиФункция чтения аргумент или STDIN

warn() 
{ 
    awk '{printf "\033[36m%s\033[m\n", $0}' <<< $1 
} 

или из STDIN

warn() 
{ 
    awk '{printf "\033[36m%s\033[m\n", $0}' 
} 

Однако я могу изменить функцию таким образом, чтобы он мог принимать либо как Perl?

ответ

2
warn() { 
    (if [ $# -gt 0 ] 
    then exec <<< $1 
    fi 
    awk '{printf "\033[36m%s\033[m\n", $0}' 
) 
} 

Команда exec позволяет выполнить перенаправление, которое сохраняется в следующих команд.

+0

Я нашел, что мне нужно было обернуть это с помощью 'exec 3 <& 0 [...] exec <& 3' –

+2

Вам не нужно, что' (...) 'выполняет код в подоболочке, так что перенаправления автоматически отменяются. – Barmar

+2

Если вся функция работает в подоболочке, вы можете удалить фигурные скобки - 'warn() (...)' - см. [Группировка команд] (http://www.gnu.org/software/bash/manual /bashref.html#Command-Grouping) в руководстве –

Смежные вопросы