現象
Windowsでgitを使う中で、git for windowsのシェル内でシェルスクリプトを回して処理を行っていたのですが、Windowsをリカバリして再インストールしたところでうまく動かなくなってしまいました。
原因を追いかけていったところ、以下のような部分が問題となっていそうだと判明しました(再現する範囲でソースは書き換えています)。
bash
1#!/bin/bash 2set -e 3 4# 中略 5 6for FILE in `find (後略)` 7do 8 # 次の行で死ぬ 9 ORIG_FILE=`echo $FILE | sed -e 's/\.gz$//'` 10 if ! [ -f "${ORIG_FILE}" ] ; then 11 # 略 12 fi 13done
find
が正常に動作しているのは確認しましたし、$FILE
にも値は来ています。echo $FILE | sed -e 's/\.gz$//'
も、単体で実行した時は正常に動作しました。ところが、変数代入しようとするとここで止まって、$?
は127という値となっていました。
怪我の功名で、bashだと${FILE/\.gz$/}
のような形でsedを使わずに動くことが判明したので、実用的には一件落着となりました。ただ、もとのコードがなぜ動かなかったのか判然としないのも気持ち悪いので、改めて質問する次第です。
質問内容
- 上の書き方で動かないのは環境要因なのか、書き方の問題なのか
- bash拡張を使わずにきちんと動かすにはどうすればいいのか
環境情報
- Windows 7 x64
- シェル環境…git version 2.9.2.windows.1付属のGit bash(MinGW64系)
uname -a
の結果MINGW64_NT-6.1 (PC名) 2.5.0(0.295/5/3) 2016-03-31 18:47 x86_64 Msys
which sed
やwhich echo
の先は/usr/bin/***
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。