2013年2月23日土曜日

zsh における $ source build/envsetup.sh 時のエラー対処

Outline

android ソースコードビルド前の準備で、 zsh を使っていると
$ source build/envsetup.sh がうまく行かないので、それの対処法を記す。

問題

android のソースコードを build する際に、 zsh を使っていると、
$ source build/envsetup.sh 時に下記のメッセージが出力される。

 WARNING: Only bash is supported, use of other shell would lead to erroneous results
build/envsetup.sh:1154: no matches found: vendor/*/vendorsetup.sh
tail: `dir' を 読み込み用に開くことが出来ません: そのようなファイルやディレクトリはありません
tail: `f' を 読み込み用に開くことが出来ません: そのようなファイルやディレクトリはありません

確かに vendor/*/vendorsetup.sh というファイルが存在しないので、
このエラーメッセージ自体は正しい。
ただ、 envsetup.sh を見てみると本来、この行でやりたかった処理は下記の一行である。
$ /bin/ls vendor/*/vendorsetup.sh vendor/*/*/vendorsetup.sh device/*/*/vendorsetup.sh 2> /dev/null

これとエラーメッセージを比較すると、
$ /bin/ls vendor/*/vendorsetup.sh
がコマンドとして打たれた時に、出力されるエラーメッセージと同じである。
つまり、 zsh では複数の引数を与えた時に、どれか1つでも実行できなかったものがあると、
全体がエラーとなってしまうらしい。
この状態では android を build するときの target を選べない。

解決策

.zshrc に以下の一行を加え、反映させれば解決する。

setopt nonomatch

これを追記した後の実行結果は以下の通り。

 WARNING: Only bash is supported, use of other shell would lead to erroneous results
including device/asus/grouper/vendorsetup.sh
including device/asus/tilapia/vendorsetup.sh
including device/generic/armv7-a-neon/vendorsetup.sh
including device/generic/armv7-a/vendorsetup.sh
including device/generic/mips/vendorsetup.sh
including device/generic/x86/vendorsetup.sh
including device/lge/mako/vendorsetup.sh
including device/samsung/maguro/vendorsetup.sh
including device/samsung/manta/vendorsetup.sh
including device/samsung/toro/vendorsetup.sh
including device/samsung/toroplus/vendorsetup.sh
including device/ti/panda/vendorsetup.sh
tail: `dir' を 読み込み用に開くことが出来ません: そのようなファイルやディレクトリはありません
tail: `f' を 読み込み用に開くことが出来ません: そのようなファイルやディレクトリはありません




0 件のコメント:

コメントを投稿