npmをインストールすると、シェルスクリプトで/usr/bin/env: 'node'が発生します。

npmをインストールすると、シェルスクリプトで/usr/bin/env: 'node'が発生します。

この問題について多くのスレッドを読んだにもかかわらず、この問題を理解できないようです。

問題の概要

シェルスクリプトからリモートサーバーにログインし、gitリポジトリをインポートし、Nodeへの絶対パスを使用して "npm install"を実行しようとすると、 "/usr/bin/env: 'node':そのファイルまたはディレクトリはありません。"メッセージが表示されます。

詳細と研究情報の提供

NVMを使用してNodeをインストールしました。リモートサーバーで「任意のノード」を実行すると、「/root/.nvm/versions/node/v12.16.2/bin/node」パスが表示されます。 SSHキーを使用してrootとしてリモートサーバーにログインします。

私のシェルスクリプトは次のとおりです。

#!/bin/sh
ssh root@my-ip -p my-port<<EOF
cd projectDir/my-project
git pull origin master
~/.nvm/versions/node/v12.16.2/bin/npm install
pm2 restart all
exit
EOF

シェルスクリプトを実行すると、次の結果が表示されます。

mesg: ttyname failed: Inappropriate ioctl for device
From git+ssh://github.com/xxxx/my-project
 * branch            master     -> FETCH_HEAD
Already up to date.
/usr/bin/env: ‘node’: No such file or directory
-bash: line 4: pm2: command not found

NVMバージョン:0.35.3ノードバージョン:v12.16.2

適切であれば、何を試したかを説明してください。

別のノードバージョンパスを試しましたが、同じ結果が得られました。シェルスクリプトの代わりにSSH経由でユーザーとしてリモートサーバーにログインし、「~/.nvm/versions/node/v12.16.2/bin/npm install」を実行すると魅力のように動作します。

答え1

解決策が見つかりました。 npmコマンドを実行する前に、「source ~/.nvm/nvm.sh;」を追加する必要があります。

より詳細な回答については、私が解決策を見つけたスレッドを確認してください。https://unix.stackexchange.com/a/425819/411880

関連情報