shell で tap 関数を作ってみた

rubytap メソッドというものがあって、 メソッドチェーンしてる時のデバッグに便利なんですが、 shell でパイプライン使ってる時の デバッグにも使えそうなので、作ってみました。

ただし、処理を入れる事はできなくて 標準エラーに内容を表示するだけです。

#!/bin/bash

function tap() {
    local input
    input=$(cat -)

    echo "$input" | sed -e 's/^/> /' >&2
    echo "$input" >&1
}

使い方はこんな感じで 内容を表示させたい所に tap をはさみます。

$ echo "hoge\nfuga" | tap | sed -e 's/hoge/fuga/'
> hoge
> fuga
fuga
fuga

tap で出力した行には先頭に > をつけてみました。