我有一个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
的最后一行,它不会处理每一行。
我如何支持所有管道情况?
答案 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 "$@" )"