微妙だったこと

スクリプトで云々するソレをでっちあげてたのですが、そのスクリプト自体も Git の管理下にあるけれど微妙な修正をして実行していつつ、それ以外のファイルは修正されていないこと、という確認をしたくて

$ git status --porcelain
 M hoge.sh

な出力を取得して比較をしてたのですがまずこの文字列比較が真にならず。

$ test "M hoge.sh" != "`$GIT status --porcelain`"
$ echo $?
0

これはどうも chomp が必要らしい、という事が分かり以下を盛り込んでみたが駄目。

$GITSTATUS=`git status --porcelain`
if [ "M hoge.sh" != "`echo -n $GITSTATUS`" ]
  exit 1;

コマンドラインから実行してみると大丈夫なのですが、

$ GITSTATUS=`git status --porcelain`
$ test "M hoge.sh" != "`echo -n $GITSTATUS`"
$ echo $?
1

実行してみると駄目。仕方なく以下に修正してみるとパス。

GITSTATUS=`echo -n ${$GIT status --porcelain}`
if [ "M hoge.sh" != "$GITSTATUS" ]; then
  exit 1;

何なのか、と。

もひとつ

test コマンドに渡すのは文字列、ってことで以下では NG で

$ test "M hoge.sh" != `echo -n $GITSTATUS`

以下にしなきゃ駄目、ってのも色々な意味で面白いなと。

$ test "M hoge.sh" != "`echo -n $GITSTATUS`"