概要
標準エラーは基本的にパイプできないので標準入力にリダイレクトしてあげましょう
環境
- macOS 10.15.7
- jq 1.5
動作する
echo '{"key":"value"}' | jq .
動作しない
ruby -e "STDERR.puts '{\"key\":\"value\"}'" | jq .
対処する
ruby -e "STDERR.puts '{\"key\":\"value\"}'" 2>&1 | jq .
2>&1
で標準エラーを標準リクエストにリダイレクトできます
おまけ: 標準エラーの tail -f を jq する場合は
ruby hoge.rb 2>&1 | while read line; do echo $line | jq -R '. as $line | try fromjson catch "not json"'; done
-R
は入力された情報をパースせずにそのまま使用するオプションです
ダブルクォートなどが削除されません
as
変数格納で .
で受け取った情報を $line
という変数に格納して次のパイプで参照できるようにします
あとは try .. catch
で受け取った $line
を評価します
JSON ではない場合は「not json」が表示されます
テストスクリプトは以下です
loop do
STDERR.puts '{"key":"value"}'
STDERR.puts 'hoge'
sleep(1)
end
0 件のコメント:
コメントを投稿