77826


**現象**  
WSL2のUbuntuのbashで`npm install vue`を実行したときに、`-bash: /mnt/c/Program
Files/nodejs/npm: /bin/sh^M: bad interpreter: No such file or directory`が出現する

そこで、`cat -e /bin/sh`コマンドを使って、改行コードを確認しようとすると、出力された物が全て文字化けしてしまっている

**期待値**  
`cat -e /bin/sh`コマンドを使って、改行コードを確認したい

**再現手順**

  1. node.jsをインストールする
  2. npmをインストールする
  3. `npm install vue`を実行する
  4. すると、`-bash: /mnt/c/Program Files/nodejs/npm: /bin/sh^M: bad interpreter: No such file or directory`が出現する
  5. 改行コードを調べるために、`cat -e /bin/sh`を実行する

**参考リンク**  
[/bin/bash^M: bad interpreter: そのようなファイルやディレクトリはありません (No such file or
directory)](https://totech.hateblo.jp/entry/2014/03/19/174129)


CC BY-SA 4.0
2021-06-27T16:17:33.033
77823
2021-06-28T05:38:58.557
36906
question
bash vue.js npm wsl
-bash: /mnt/c/Program Files/nodejs/npm: /bin/sh^M: bad interpreter: No such file or directoryが出現したときに、改行コードを確認する方法を知りたいです


なんか限りなく XY 問題な気がしますが

> `cat -e /bin/sh` コマンドを使って、改行コードを確認したい

あなたが確認したいのは `/mnt/c/Program Files/nodejs/npm` の改行コードであって `/bin/sh`
の改行コードではないはず。

> 文字化け

そりゃバイナリファイルである `/bin/sh` をコンソールに表示すれば化けているに決まっています。

`/bin/sh^M: bad interpreter` のメッセージはシェルスクリプトファイルの１行目 `shebang` (シバンともシェバンとも)
の改行コードが `CR LF` かつ、そのシバンを解釈する何か (
[execve](https://linuxjm.osdn.jp/html/LDP_man-pages/man2/execve.2.html)
カーネル関数と `/bin/sh` の合わせ技なんだけど) が LF 改行のみ対応の場合に `#!/bin/sh<CR><LF>` のシバン行を
`/bin/sh<CR>`
なファイルを起動すると解釈し、そんなファイルはないのでエラーになるという現象です。なのであなたのところで発生したそのエラーメッセージの原因は
`/mnt/c/Program Files/nodejs/npm` のシバン行の改行コードが `CR LF` であることです。 `/bin/sh`
側ではありません。

なので使うツールも確認する対象ファイルも違うっス。こういう場合は普通 `file` なり `od` なりで確認すればいいです。ウチの WSL2 Ubuntu
20.04 TLS の場合

[code]

    $ file /bin/sh /bin/dash abc.sh
    /bin/sh:   symbolic link to dash
    /bin/dash: ELF 64-bit LSB shared object, x86-64, <以下略>
    abc.sh:    POSIX shell script, ASCII text executable, with CRLF terminators
    $ od -tx1 abc.sh
    0000000 23 21 2f 62 69 6e 2f 73 68 0d 0a 65 63 68 6f 20
    0000020 61 62 63 0d 0a
    0000025
    $ ./abc.sh
    abc
    $ 
    
[/code]

ってことで追及すべきはなぜ `npm` コマンドの内部改行コードが `CR LF` なのか、だけどその辺は別途コメントにある通りなのだろうと思われます。

* * *

まあシバン評価するルーチン（ [linux](/questions/tagged/linux "'linux' のタグが付いた質問を表示") kernel
ですね）側が改行コード `CR LF` に対応してくれていればいいだけですし、オイラんところの Ubuntu 20.04 TLS ストア更新日
2021/06/12 では前述のとおりシバン行の改行が `CR LF` である `abc.sh`
も期待通り動いているわけで、質問者さんもストアアプリの更新で WSL2 Ubuntu を更新すればそのまま動くかもしれないです。


CC BY-SA 4.0
2021-06-28T00:40:07.247
77826
2021-06-28T05:38:58.557
2021-06-28T05:38:58.557
8589
8589
77823
answer