OSX 中的节点和 NPM 路径

Ale*_*lex 6 macos node.js

我有一个非常奇怪的配置问题。

当登录到机器(SSH 会话)并使用交互式 shell 执行以下命令时,它们会成功:

node --version
npm --v
Run Code Online (Sandbox Code Playgroud)

但是,当我通过远程机器的脚本执行以下操作时:

#!/bin/bash

#Script input arguments
user=${1} 
server=${2} 

#Tell the shell to quote your variables to be eval-safe!
printf -v user_q '%q' "$user"
printf -v server_q '%q' "$server"
#

# Script variables
address="$user_q"@"$server_q"
#

function run {
    ssh "$address" /bin/bash "$@"
}


run << SSHCONNECTION

node --version
npm --v

 exit
SSHCONNECTION
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

/bin/bash: line 2: node: command not found

/bin/bash: 第 3 行: npm: 命令未找到

我意识到问题可能出在 .bash_profile 文件配置中

export PATH="/usr/local/bin/npm:/usr/local/bin/node:/usr/local/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

此外,这里是结果npm config get prefix

/usr/本地

你能建议我做错什么吗?

Far*_*hat 0

我相信发生的事情是因为.bash_profile只有在为交互式 shell 调用 bash 时才会执行,更多信息请参见: https: //www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files .html#Bash-启动文件

当直接调用脚本并将其传递到 /bin/bash 时,它将表现为非交互式 shell,默认行为不读取.bash_profile.

我建议您设置 PATH 变量,/etc/environment以便它对所有用户和所有脚本编写方式都有效。