テキストの色付けは非常に簡単です。各行を読み、最初と最後に適切なエスケープシーケンスを付けてエコーします。ただし、標準エラーはパイプに渡されないため、標準エラーの色付けには注意が必要です。
これは、標準エラーと標準出力を交換してから、標準出力をフィルタリングすることで機能する1つのアプローチです。
テストコマンドは次のとおりです。
#!/bin/bash
echo hi
echo 'Error!' 1>&2
そしてwrapper
スクリプト:
#!/bin/bash
(# swap stderr and stdout
exec 3>&1 # copy stdout to fd 3
exec 1>&2 # copy stderr to fd 1
exec 2>&3- # move saved stdout on fd 3 over to 2
"${@}") | while read line; do
echo -e "\033[31m${line}\033[0m"
done
それで:
$ ./wrapper ./test-command
hi
Error! # <- shows up red
残念ながら、wrapperコマンドからのすべての出力は、stderr
ではなくstdout
から出力されるため、出力をそれ以上のスクリプトにパイプすることはできません。一時的なFIFOを作成することで、おそらくこれを回避できます…しかし、うまくいけば、この小さなラッパースクリプトでニーズを満たすのに十分です。