Linux Bash:pipe命令输出用作第二个参数
在我的bash脚本中,我有一个将消息附加到日志文件的函数。其用途如下:Linux Bash:pipe命令输出用作第二个参数,linux,bash,shell,Linux,Bash,Shell,在我的bash脚本中,我有一个将消息附加到日志文件的函数。其用途如下: addLogEntry (debug|info|warning|error) message 它生成格式良好的行,带有严重性指示、时间戳和调用函数名 我一直在寻找一种方法,将一些标准命令(如rm)的输出传递给这个函数,同时仍然能够将严重性指定为第一个参数。我还想捕获stdout和stderr 这在不使用变量的情况下是可能的吗?让变量记录一条微不足道的日志消息感觉太过分了,这也会妨碍代码。您有两个选择: 您可以向addLog
addLogEntry (debug|info|warning|error) message
它生成格式良好的行,带有严重性指示、时间戳和调用函数名
我一直在寻找一种方法,将一些标准命令(如rm)的输出传递给这个函数,同时仍然能够将严重性指定为第一个参数。我还想捕获stdout和stderr
这在不使用变量的情况下是可能的吗?让变量记录一条微不足道的日志消息感觉太过分了,这也会妨碍代码。您有两个选择:
addLogEntry
函数添加支持,使其接受来自标准输入的消息(当未提供消息参数或-
作为消息提供时)addLogEntry info "$(rm -v .... 2>&1)"
请注意,这将丢失输出中的任何尾随换行符(如果有必要)您还可以使用xargs来实现这一点
$ rm -v ... 2>&1 | xargs -I% addLogEntry info %
info removed 'blah1'
info removed 'blah2'
...
对于此命令,将为输入中的每一行调用
addLogEntry
。如果要将命令的输出通过管道传输到addLogEntry
,则必须将其更改为接受STDIN发出的消息。然后您可以执行rmfile2>&1 | addLogEntry调试
(或类似操作)。谢谢!我将尝试重写函数。谢谢你的提示!最后我可能不得不求助于第二种解决方案,但我会尝试第一种,我不知道你的函数是什么样子的,但对于第一个函数,你只需要检测参数的数量,然后使用类似于cat
或read
的方法来读取标准输入并进行日志记录。(如果您使用的是日志记录工具,它实际上可能能够直接为您处理该问题。logger
例如可以。)