2013-06-03 29 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

你不应该需要这个,'(...)'在子shell中执行代码,以便重定向自动撤消。 – Barmar

+2

如果整个函数运行在一个子shell中,可以删除大括号 - 'warn()(...)' - 参见[Grouping Commands](http://www.gnu.org/software/bash/manual) /bashref.html#Command-Grouping) –