はじめに

実行中の標準出力を受け取って、何か別のコマンドを実行したいことがあったので、それを実現する方法を紹介します。

標準出力を受け取る

単純に出力される内容を別コマンドに渡すにはパイプラインを使用すれば簡単にできます。

ただ、少し複雑なことをやろうとすると少し自由度が低いので、whileread を使ってコマンドを自由に使えるようにしましょう。

以下では出力内容を line という変数として受け取るスクリプトです。

<実行したいコマンド> | while read -r line
do
  <出力を受け取って処理するコマンド>
done;

例えば全く意味のないことですが ping の実行をそのまま表示するコマンドは以下のようになります。

ping 127.0.0.1 | while read -r line
do
  echo $line
done;

これを使えば、例えば if文で何か分岐させたりなど色々と応用が効きます。

ちなみに、これを利用しているのが、以前に紹介している マイクラのログイン通知 です。

おわりに

シェルスクリプトは特別得意なわけではないので、もっと良い方法があるかもしれません。あれば教えてください。