捕获变量中的init脚本输出

时间:2013-03-14 00:36:04

标签: bash stdout init.d

我正在尝试将init脚本的输出捕获到变量中,但在这种情况下,它并不是非常简单,因为init脚本使用的是log_daemon_msg和log_failure_msg。为什么输出成功通过此管道:

service tomcat7 start | grep Tomcat

但不是这个?

service tomcat7 start | read OUTPUT; echo $OUTPUT

在第二个示例中,$ OUTPUT的值是所有init脚本的列表,这不是我所期望的。同样,以下示例还会生成/etc/init.d中所有内容的列表:

OUTPUT=$(service tomcat7 start)

3 个答案:

答案 0 :(得分:1)

在第二个示例中,read在子shell中设置OUTPUT的值。当管道结束时,子shell退出,OUTPUT的值丢失。使用第三个例子。

答案 1 :(得分:0)

service tomcat7 start | 
while read OUTPUT
do
   echo $OUTPUT
done

这是有效的,因为命令的输出中只有一行而不是一行。你需要多次读取。因为命令发出了多行。

答案 2 :(得分:0)

如果$ OUTPUT包含扩展的特殊字符(用于文件名扩展),它可能已经工作,似乎没有。试试echo "$OUTPUT"