Bash:管道命令输出作为第二个参数

时间:2015-09-22 19:28:14

标签: linux bash shell

在我的bash脚本中,我有一个将消息附加到日志文件的功能。它使用如下:

addLogEntry (debug|info|warning|error) message

它生成格式良好的行,包括严重性指示,时间戳和调用函数名称。

我一直在寻找一种方法将一些标准命令(如rm)的输出传递给此函数,同时仍然能够将严重性指定为第一个参数。我也想捕获stdout和stderr。

这可以不使用变量吗?让变量记录一个可测量的日志消息感觉过分,并且它也会阻塞代码。

2 个答案:

答案 0 :(得分:2)

您有两种选择:

  1. 您可以添加对addLogEntry函数的支持,使其接受来自标准输入的消息(当没有给出消息参数或者给出-作为消息时)。

  2. 您可以使用Command Substitution运行命令并将其输出捕获为函数的参数:

    addLogEntry info "$(rm -v .... 2>&1)"
    

    请注意,这会丢失输出中的任何尾随换行符(如果重要的话)。

答案 1 :(得分:0)

您也可以使用xargs来完成此操作

$ rm -v ... 2>&1 | xargs -I% addLogEntry info %
info removed 'blah1'
info removed 'blah2'
...

对于此命令,将为输入中的每一行调用addLogEntry