読者です 読者をやめる 読者になる 読者になる

rsync結果を色つきで表示するシェルバッチ

「色つきで結果を表示するrsyncスクリプト」d:id:maru_cc:20080219:1203431683 で、phpで書いた色つきスクリプトを作成しましたが、それをシェルバッチにしてみました。

#!/bin/sh
rsync "$@" | sed "s/deleting .*/`echo -e '\e[1;31m&\e[0m'`/" | sed "s/^[^ ]*$/`echo -e '\e[1;32m&\e[0m'`/"

このシェルスクリプトに通常のrsyncと同様のパラメータを渡して実行すると、結果を色つきで表示してくれます。


「シェルバッチで複数行の結果を変数に入れる方法がわからない」d:id:maru_cc:20080220:1203514467 は、結局解決できませんでした。。。
なので、パイプを使って結果を渡すようにしましたが、以下の方法では色が付かず、試行錯誤してました。

#!/bin/sh
rsync "$@" | sed "s/deleting .*/\e[1;31m&\e[0m/" | sed "s/^[^ ]*$/\e[1;32m&\e[0m/"

この方法だと \eの制御文字がちゃんと表示されず、そのまま記号が出てしまっていました。
解決方法は、バッククオートで囲った中で、echo -eを使ってあげることで解決できました。


deleting以外の色付けについて、どんな文字に色を付ければいいのか、rsyncのソースを落として見てみました。

$ wget ftp://ftp.infoscience.co.jp/pub/rsync/rsync-2.6.9.tar.gz
$ tar zxvf rsync-2.6.9.tar.gz
$ cd rsync-2.6.9
$ cscope-indexer -r ./

あとは、いつも通りに cscopeでソースの探索。
いくつかそれらしい文字を発見したが、エラー文言までたどるとちょっとめんどくさい感じ。

まぁ、普通のセンスならディレクトリやファイル名にスペースは無いでしょう。という感じで、スペースが入っていない行に色付ける感じにしてみました。