如何在bash脚本中将管道输入包装到stdout?

时间:2013-02-27 13:06:48

标签: bash stdout pipe stdin

我想写一个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专业知识的人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:2)

就我个人而言,我会用这种方式搜索:

<强> myscript.sh

echo 'BEFORE' $(cat) 'AFTER'

答案 1 :(得分: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