我有一个非常奇怪的配置问题。
登录机器(SSH会话(并使用Interactive Shell执行以下命令,它们成功:
node --version
npm --v
但是,当我通过远程计算机执行以下脚本时:
#!/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
我将获得以下输出:
/bin/bash:第2行:节点:找不到命令
/bin/bash:第3行:npm:找不到命令
我意识到问题可能是.bash_profile文件配置
export PATH="/usr/local/bin/npm:/usr/local/bin/node:/usr/local/bin:$PATH"
另外,这是npm config get prefix
的结果:
/usr/local
您能建议我做错什么吗?
我相信发生了什么事,这是由于.bash_profile
仅在调用bash的交互式外壳时执行的事实,请在此处进行更多信息:https://www.gnu.gnu.org/software/bash/manual/html_node/bash-startup-files.html#bash-startup-files
直接调用脚本并将脚本传递到/bin/bash时,它将表现为非相互作用的外壳,默认行为不读取.bash_profile
。
我建议在/etc/environment
中设置路径变量,以便对所有用户和所有脚本的方式都会影响。