httpieコマンドの出力を印刷し、grepにパイプします。

httpieコマンドの出力を印刷し、grepにパイプします。

httpieリクエストの出力を印刷してgrepにパイプしてリクエストが成功したか失敗したかを確認するにはどうすればよいですか?

http --print=hb POST http://localhost:8080 | grep -c "HTTP/1.1 200" && echo "succeeded" && exit 0 || echo "failed" && exit 1

私はxargsを使ってみました。 http://localhost:8080 | xargs sh -c 'response=$1' sh | grep ...

しかし、うまくいきませんでした。何のアイデアもありません。

ベストアンサー1

teestdinのコピーを別の場所に送信するための標準ユーティリティです。 >()stdinをすべてのコマンドに渡すbash構成。通常、「|」と入力して直接送信しますが、この機能は変更されていないstdinコピーを送信したい状況で使用されます。

次のように組み合わせます。

$ command1 | tee >( command2) | command3

command2そしてcommand3同じことを見ました。

ユースケースに応じて、以下を試してください。

$ http --print=h http://www.google.com | tee >( grep -c "HTTP/1.1 200" >/dev/null && echo "succeeded" > /dev/stderr || echo "failed" > /dev/stderr) | sed 's/^/# /'
# HTTP/1.1 200 OK
# Date: Thu, 26 May 2022 00:32:29 GMT
... elided ...
# Set-Cookie: NID=511=CEilmSmMThJIS-KWlutGVDxrE; expires=Fri, 25-Nov-2022 00:32:29 GMT; path=/; domain=.google.com; HttpOnly
# 
succeeded

sedパイプを介して得られる内容、httpつまり出力の完全なコピーを説明するためにcommand3を使用しています。

注意してください! grepデフォルトでは標準出力に書きたい(echoesのように)。したがって、command2はgrepesの出力を/ dev / nullにリダイレクトし、両方のechoesを/ dev / errorにリダイレクトします。これがなければ、sed作業を開始する前に標準入力が変更されます。

以下は、command2リダイレクトのないコードスニペットです。

$ http --print=h http://www.google.com | tee >( grep -c "HTTP/1.1 200" && echo "succeeded" || echo "failed") | sed 's/^/# /'
# HTTP/1.1 200 OK
# Date: Thu, 26 May 2022 00:35:01 GMT
... elided ...
# Set-Cookie: NID=511=L6sDnkpxBHQMA_L0JQCFqM; expires=Fri, 25-Nov-2022 00:35:01 GMT; path=/; domain=.google.com; HttpOnly
# 
# 1
# succeeded

sedgrep -c1の個数を確認し、echo succeeded前に「#」を付けます。

おすすめ記事