【问题标题】:How to wrap piped input to stdout in a bash script?如何在 bash 脚本中将管道输入包装到标准输出?
【发布时间】:2013-02-27 13:06:47
【问题描述】:

我想编写一个bash 脚本,它将用一些文本包装piped 输入。

基于谷歌搜索并尝试从示例中挑选。 这是我到目前为止所拥有的,但不起作用:

#!/bin/sh

if readlink /proc/$$/fd/0 | grep -q "^pipe:"; then
    echo "{ "template":{"name":"contact sheet template","root":"root","parameters": ["pages"]},"pages":"
    cat
    echo "}"
fi

我从另一个程序接收一个 JSON 列表作为piped 输入,我想在pipe 将结果之前和之后输出到下一个程序。

program_1 | wrapper.sh | program_2 > outputfile

但它不输出任何东西。

有更多bash 专业知识的人可以为我指明正确的方向吗?

【问题讨论】:

  • 它应该是什么 cat ?输入来自哪里?
  • Jarrod - 您能否提供一个示例,说明您发送的内容以及您希望输出的内容?

标签: bash stdout pipe stdin


【解决方案1】:

我个人会这样搜索:

myscript.sh

echo 'BEFORE' $(cat) 'AFTER'

【讨论】:

    【解决方案2】:

    您的意思是您的脚本正在从管道读取标准输入,例如

    $ other-process | my-script
    

    ?

    那么脚本中的命令将简单地从管道继承标准输入

    #!/bin/sh
    
    # Output preamble
    cat <<EOF
    { "template":{"name":"contact sheet template","root":"root","parameters": ["pages"]},"pages":
    EOF
    
    cat   # This reads from standard input inherited from your script
    
    # Output the closing
    cat <<EOF
    }
    EOF
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-08
      • 2016-05-30
      • 1970-01-01
      相关资源
      最近更新 更多