ちょっとした調べ物中、指定したコマンドの出力結果を出力に応じてコマンド出力先を指定できる『pipexec』なるものを見かけたので、面白そうなのでちょっと試してみる。

1. インストール

まずはインストールから。 DebianやUbuntu系であれば、aptからインストールが可能だ。

sudo apt install pipexec

CentOSやMac OS Xなどでは別途コンパイルが必要になるので、以下のようにコマンドを実行しコンパイル、インストールを行う。

wget https://github.com/flonatel/pipexec/releases/download/2.5.5/pipexec-2.5.5.tar.xz
xz -dc pipexec-2.5.5.tar.xz | tar xfv -
cd pipexec-2.5.5
./configure
make && make install

2. 使ってみる

さて、それでは実際に使ってみよう。 単純なコマンドの置き換えをしてみる。 コマンド…というか、プロセスの定義で実行コマンドはフルパスで記述する必要がある。

printf ABCDE | sha256sum | awk '{print $1}'
printf ABCDE | pipexec [ SHA /usr/bin/sha256sum ] [ AWK /usr/bin/awk '{print $1}' ] "{SHA:1>AWK:0}"
[root@BS-PUB-CENT7-01 ~]# printf ABCDE | sha256sum | awk '{print $1}'
f0393febe8baaa55e32f7be2a7cc180bf34e52137d99e056c817a9c07b8f239a
[root@BS-PUB-CENT7-01 ~]# printf ABCDE | pipexec [ SHA /usr/bin/sha256sum ] [ AWK /usr/bin/awk '{print $1}' ] "{SHA:1>AWK:0}"
f0393febe8baaa55e32f7be2a7cc180bf34e52137d99e056c817a9c07b8f239a

(動いてるけど…なんかえらい野暮ったくなったな)

で、このpipexecをインストールしてくると、一緒にptee、peetなるコマンドもインストールされてくる。 pteeが標準入力から指定したファイルディスクリプタ(複数)で出力を、peetはその逆で複数のファイルディスクリプタから入力して、その結果を標準出力で出してくれるコマンドらしい。 これらと組み合わせることで、通常のbashでのパイプ処理とはまた違うことができるようだ。

また、記述上はパイプのループができるという記載がある…のだが、↑の処理をそのままループさせてみたのだけどうまく動かなかった。 どうも、一回使ったプロセスをそのまま使いまわそうとしてるみたいだ(なぜループになった段階でプロセスの作り直しをしてないのだろう?)。

面白いコマンドではあるけど、ちょっと使いどころが難しそうな感じだ。 (ループ使えた人いたら教えてください…)