zshの設定がsetopt nomatchの状態でnvmを使用すると以下のようなエラーが出る場合がある
nvm_version:17: no matches found: v*
nvm:175: no matches found: *
これは、setopt nomatchによって、ワイルドカードによるファイル名生成のパターンにマッチするものがなかった場合、エラーメッセージが表示されるわけですね
直し方はいくつかあります。
まぁ、わかりやすいですね。nomatchを無効にします。
具体的に、エラーが出ているのは以下2箇所なので、コマンドの先頭に=をつけてnomatchによるエラーを抑制します。 (ただし、こうするとbashで使えなくなる…) 以下、差分 (追記:これ、別の環境で実行したら何故かエラーがとまらない…)
diff --git a/nvm.sh b/nvm.sh
index 6d589d8..fb88092 100755
--- a/nvm.sh
+++ b/nvm.sh
@@ -34,7 +34,7 @@ nvm_version()
VERSION=`node -v 2>/dev/null`
fi
if [ "$PATTERN" = 'all' ]; then
- (cd $NVM_DIR; \ls -dG v* 2>/dev/null || echo "N/A")
+ (cd $NVM_DIR; =\ls -dG v* 2>/dev/null || echo "N/A")
return
fi
if [ ! "$VERSION" ]; then
@@ -225,7 +225,7 @@ nvm()
"alias" )
mkdir -p $NVM_DIR/alias
if [ $# -le 2 ]; then
- (cd $NVM_DIR/alias && for ALIAS in `\ls $2* 2>/dev/null`; do
+ (cd $NVM_DIR/alias && for ALIAS in `=\ls $2* 2>/dev/null`; do
DEST=`cat $ALIAS`
VERSION=`nvm_version $DEST`
if [ "$DEST" = "$VERSION" ]; then
$ nvm install v0.5.10
$ nvm alias default
'*'にマッチするファイルが存在しない場合に該当エラーが出現するので、では上記コマンドでファイルを作ってしまおうというもの。 まぁ、完全なる対症療法。
万能の解決方法がない…setopt nonomatchしかないのか…
まぁ、nvm installとnvm aliasが完了していればエラーも出ないし、気にせずに使っていればそのうち出なくなるたぐいのエラーなのでどうでもいいといえばどうでもいいエラーですけどね…
参考:
zshのsetopt nomatchの意味を以下で調べました。
http://www.proc.org.tohoku.ac.jp/~kato/doc/dot.zshrc.euc
結局問題は、setopt nomatchによって出力されるエラーの結果が標準エラー出力として取得できていないことなので、それの解決法を探してみた。以下方法でいけそう。これならbashでもいける。
diff --git a/nvm.sh b/nvm.sh
index 6d589d8..fb88092 100755
--- a/nvm.sh
+++ b/nvm.sh
@@ -34,7 +34,7 @@ nvm_version()
VERSION=`node -v 2>/dev/null`
fi
if [ "$PATTERN" = 'all' ]; then
- (cd $NVM_DIR; \ls -dG v* 2>/dev/null || echo "N/A")
+ (cd $NVM_DIR; (\ls -dG v*) 2>/dev/null || echo "N/A")
return
fi
if [ ! "$VERSION" ]; then
@@ -225,7 +225,7 @@ nvm()
"alias" )
mkdir -p $NVM_DIR/alias
if [ $# -le 2 ]; then
- (cd $NVM_DIR/alias && for ALIAS in `\ls $2* 2>/dev/null`; do
+ (cd $NVM_DIR/alias && for ALIAS in `(\ls $2*) 2>/dev/null`; do
DEST=`cat $ALIAS`
VERSION=`nvm_version $DEST`
if [ "$DEST" = "$VERSION" ]; then
コマンドがエラー出力を発しているわけではなく、シェルがエラー出力を出しているからサブシェルでコマンドを起動しないとエラー出力を拾えないっていうことですよね。
で、プルリクエストを送ってみました。
nvm-sh/nvm#93
で、なんかコメントがつかないなーと思ってたら、Wikiに以下記載が…
https://github.com/creationix/nvm/wiki/NVM-Forks
「自分の使う機能以外は取り込まない。zsh使いたければforkしなさい」って意味だよねこれ…
というわけで、対応した私のリポジトリを記載しておきます。
https://github.com/dekokun/nvm
ついでに、私のnvmに色々な機能を追加しました。
https://github.com/dekokun/nvm
nvm install latest(最新のnodeをインストール)とか、nvm ls remote(インストール可能なnode一覧を出力)とか。