ラベル zsh の投稿を表示しています。 すべての投稿を表示
ラベル zsh の投稿を表示しています。 すべての投稿を表示

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' を 読み込み用に開くことが出来ません: そのようなファイルやディレクトリはありません




2012年7月11日水曜日

[zsh] complete

zshだとcompleteコマンドがない。
completeコマンドは、ここに説明がある通り。
簡単に言うと、tab補完を強化できるコマンドということらしい。
zshはもともと協力な補完機能があるのでいらないということなのかな?
ただ、gitの補完機能を強化するために利用する機会があって、このcompleteで躓いていた。
調べた所、zshでcompleteの代わりにcompctlというコマンドが用意されているらしい。
completeで記述されている部分をcompctlに書き換えたらエラーが出なくなった。一件落着。