代码之家  ›  专栏  ›  技术社区  ›  OM222O

Bash命令替换问题

  •  0
  • OM222O  · 技术社区  · 12 月前

    我正在编写一个Python脚本来解析不同主机上的各种日志。 我可以通过Python的子流程模块成功地运行bash脚本,但是,我想尽量减少ssh调用的数量,所以我试图将ssh、grep和find组合成一个命令。

    当某些主机可能没有任何日志文件时,问题就开始了。我的命令是这样的:

    ssh SOME_HOST 'grep "SOME_VALUE" $(find SOME_PATH -type f -name "*.log")'
    

    当没有日志文件时,这将变成 grep "SOME_VALUE" 并且永远挂着。我试着用双引号把它括起来,这样它就变成了 grep "SOME_VALUE" "" 相反

    ssh SOME_HOST 'grep "SOME_VALUE" "$(find SOME_PATH -type f -name "*.log")"'
    

    现在我遇到了完全相反的问题:当发现一些日志时,我会得到:

    grep: FILE_A^JFILE_B^J... : No such file or directory
    

    我已经被这个问题困扰了几天,谷歌/RTFMing并没有起到多大帮助。我试过了 tr 用空格替换换行符,但出现了一些其他奇怪的错误:(有没有一种简单的方法可以在一个命令中做到这一点?)?

    1 回复  |  直到 12 月前
        1
  •  0
  •   Barmar    12 月前

    添加一个额外的文件名参数,使参数列表永远不会为空。您可以使用 /dev/null 作为从不匹配的伪文件 grep .

    ssh SOME_HOST 'grep "SOME_VALUE" $(find SOME_PATH -type f -name "*.log") /dev/null'