我有一个非常奇怪的配置问题。
当登录到机器(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/本地
你能建议我做错什么吗?
我相信发生的事情是因为.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以便它对所有用户和所有脚本编写方式都有效。
| 归档时间: |
|
| 查看次数: |
33628 次 |
| 最近记录: |