【问题标题】:Npx returns command not found when triggered from SSH从 SSH 触发时,Npx 返回命令未找到
【发布时间】:2021-03-30 13:28:54
【问题描述】:

我在 SO 上发现了很多类似的问题,但遗憾的是它们与我的问题无关。

我已经用 NVM 安装了 Node。

$ node -v
v14.16.0

$ npm -v
7.7.6

$ npx -v
7.7.6

我正在编写一个部署脚本,它将从我们的存储库运行 git pull,然后(除其他外)编译资产。如果这有帮助,工作环境是 Laravel 8,但我认为这与我的问题无关。

以远程服务器上的用户身份登录时运行npm install && npm run prod 将完美运行。但是通过 SSH 运行相同的命令会返回以下内容:

jaeger@local-computer~$ ssh deploy@distant-server-with-nvm-node-npm-npx '/bin/sh -c "node -v && npm -v && npx -v && exit"'


Connecting...
v14.16.0
7.7.6
/bin/sh: 1: npx: not found

所以...我迷路了。我见过关于 node 和/或 npm 被识别的问题,但没有关于 npx 的问题,我需要它与 Laravel 混合。当然,从远程服务运行上述注释将完美运行。

我尝试了什么:

  • PermitUserEnvironment yes添加到/etc/ssh/sshd_config,然后重启ssh
  • 通过npm i -g npx全局安装npx,被nvm拒绝,说明npx已经存在。
  • 重新安装 nvm 和节点。
  • /home/myuser/.nvm/versions/v14.16.0/bin/npx/usr/local/bin 之间创建符号链接

我还能尝试什么?提前谢谢你

【问题讨论】:

    标签: node.js npm ssh npx


    【解决方案1】:

    很可能,nvm 已将自身安装到您的 .bashrc 中,但您正在触发不同的 shell (sh)。即使/bin/sh 指向 bash,这也会禁用 rcfile - 请参阅下面的说明。直接使用bash

    请注意 bash 手册页的摘录: --norc

    如果 shell 是交互式的,则不要读取和执行系统范围的初始化文件 /etc/bash.bashrc 和个人初始化文件 ~/.bashrc。如果 shell 以 sh 的形式调用,则此选项默认开启。

    这意味着除了通过-c 指定命令之外,您还需要使用标志-i 强制bash 作为交互式 shell 运行。

    【讨论】:

    • 神圣!!非常感谢!我不知道我需要这样做,即使我知道可以让它互动!
    猜你喜欢
    • 2018-09-28
    • 2015-05-04
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 2022-08-22
    • 2023-03-08
    相关资源
    最近更新 更多