Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Bash:pipe命令输出用作第二个参数_Linux_Bash_Shell - Fatal编程技术网

Linux Bash:pipe命令输出用作第二个参数

Linux Bash:pipe命令输出用作第二个参数,linux,bash,shell,Linux,Bash,Shell,在我的bash脚本中,我有一个将消息附加到日志文件的函数。其用途如下: addLogEntry (debug|info|warning|error) message 它生成格式良好的行,带有严重性指示、时间戳和调用函数名 我一直在寻找一种方法,将一些标准命令(如rm)的输出传递给这个函数,同时仍然能够将严重性指定为第一个参数。我还想捕获stdout和stderr 这在不使用变量的情况下是可能的吗?让变量记录一条微不足道的日志消息感觉太过分了,这也会妨碍代码。您有两个选择: 您可以向addLog

在我的bash脚本中,我有一个将消息附加到日志文件的函数。其用途如下:

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
    例如可以。)