Panda Noir

JavaScript の限界を究めるブログでした。最近は幅広めに書いてます。

npm-scriptsはどうやらbashらしい

500記事目ですが、そんなこと関係ないです。普通にいつもどおり書きます。

詳しいドキュメントがみつからなかったのがアレですが、少し調査した結果を報告いたします。

調べた経緯

最近、fish shellをメインに使っています。そこでふと「npm-scriptsの&&はfish仕様にしないとなのか?」と思い、調べてみました。

どうやらfishで実行されていないらしい

fishとbashはかなり書き方に違いがあります。たとえばbashでは次のように書きます。

command1 && command2

これがfishではこうなります。

command1; and command2

&&でつなぐとエラーになります。

ではnpm-scriptsではどうなのでしょうか?

  "scripts": {
    "hoge": "echo hoge && echo fuga"
  }

bashでは当然hoge fugaと表示されます。fish環境下で実行した場合は、なんとhoge fugaとなります。もしnpm-scriptsが現在のシェルにて実行されている場合、このスクリプトはエラーが出るはずです。

ここで問題となるのは「どのシェルで実行されているのか」です。

調査してみる

気を付けて!!Bashとzshの微妙な違い - Qiita

ここを元にいくつかスクリプトを書いて実行してみました。

  "scripts": {
    "survey1": "echo ~$USER",
    "survey2": "echo ~ghost",
    "survey3": "arr=(a b c); echo ${arr[0]}"
  }

これらをテストしてみたところ、どうやらzshでもfishでもなくbashのようです。僕の知らない他のシェルの可能性もありますが、とりあえずbashに近いシェルであることは間違いないようです。