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でソースの探索。
いくつかそれらしい文字を発見したが、エラー文言までたどるとちょっとめんどくさい感じ。
まぁ、普通のセンスならディレクトリやファイル名にスペースは無いでしょう。という感じで、スペースが入っていない行に色付ける感じにしてみました。