首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ssh找不到/usr/local/bin路径

ssh找不到/usr/local/bin路径
EN

Stack Overflow用户
提问于 2018-11-27 23:21:37
回答 1查看 3.3K关注 0票数 3

如果我通过ssh -p22 jenkins@192.168.2.220登录到远程Mac并键入docker,它会找到可执行文件,因为如果我检查echo $PATH,它也会找到路径/usr/local/bin。但是,如果我在一个文件setup-mac.sh中做同样的操作,比如

代码语言:javascript
复制
#!/bin/bash
ssh jenkins@192.168.2.220 '/bin/bash -s' << 'EOF'
"echo $PATH" 
"bash run-docker.sh"
EOF

我通过shell和bash setup-mac.sh执行它,它在PATH中找不到/usr/local/bin,因此也没有运行docker,因为命令是未知的。

在远程Mac上,有一个文件run-docker.sh,它是一个调用docker命令的bash文件,如果在本地调用它就可以工作。

为了解决这个问题,我已经在sshd_config中的mac上启用了sshd_config,但这是行不通的。虽然我只是重新启动ssh服务,而不是整个机器。同时,我将远程run-docker.sh脚本上的所有停靠命令更改为别名${DOCKER},并在脚本开始时将其初始化为DOCKER=/usr/local/bin/docker,但这只是一个解决办法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-28 21:24:02

我猜问题的出现是因为/usr/local/bin是由'jenkins‘用户的个人初始化文件(~/.bashrc)添加到PATH中的。这仅由交互式shell运行,而由ssh ... '/bin/bash -s' ...运行的shell不是交互式的。

您可以尝试通过使用/bin/bash -i -s来强制shell具有交互性,但这可能会导致其他问题。(外壳程序可能尝试设置作业控制,但失败。PS1的值可能出现在输出中。...)

通常,不能依赖为程序正确设置的PATH。有关问题的详细分析,请参阅在脚本中设置路径-编写OS脚本在bash脚本中使用Linux命令的正确方法也是相关的,但是没有太多的信息。

永久解决问题的一个简单而可靠的方法是在run-docker.sh开始时显式地设置所需的路径。例如:

代码语言:javascript
复制
export PATH=/bin:/usr/bin:/usr/local/bin

如果run-docker.sh运行位于其他位置的程序,则可能需要向路径添加其他目录。

该问题的另一个解决方案是在代码中使用通往命令的完整路径。然而,这使得代码更难阅读,更难维护,更难测试。设置一个安全的PATH通常是一个更好的选择。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53509740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档