Bash脚本支持将数据传输到其中

时间:2016-05-15 21:15:55

标签: bash shell unix pipe

我有一个bash脚本,我想扩展以支持管道json。

示例:

echo '{}' | myscript store

所以,我尝试了以下内容:

local value="$1"

if [[ -z "$value" ]]; then
  while read -r piped; do
    value=$piped
  done;
fi

在上面的一个简单案例中有效,但是:

cat input.json | myscript store

只获取文件input.json的最后一行,它不会处理每一行。

我如何支持所有管道情况?

2 个答案:

答案 0 :(得分:1)

以下作品:

public function render($request, Exception $e)
{
    $response = parent::render($request, $e);

    if ($response->getStatusCode() == 422) {
        $renderResult = parent::render($request, $e);
        $returnResult['error'] = json_decode($renderResult->content(), true);
        $returnResult = json_encode($returnResult);

        return new Response($returnResult, $response->getStatusCode());
    } else {
        return parent::render($request, $e);
    }

}

诀窍是使用if [[ -z "$value" && ! -t 0 ]]; then while read -r piped; do value+=$piped done; fi 并检查+=,检查我们是否正在管道。

答案 1 :(得分:0)

如果你想表现得像cat,为什么不使用它?

#! /bin/bash
value="$( cat "$@" )"