この問題について多くのスレッドを読んだにもかかわらず、この問題を理解できないようです。
問題の概要
シェルスクリプトからリモートサーバーにログインし、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