0
0

Ubuntu SSH 环境下如何自定义 PATH 等变量

图拉鼎 发表于 2018年04月15日 21:33 | Hits: 324

今天在设置一台 Server 的时候,又因为一个老问题卡了一下。解决后想:当时要是写了文章就好了…于是为了不发生第三次这样的事情,我写了这篇文章。

这个问题就是 SSH 环境下的 Path 环境变量。在 Server 上,为了使用最新版本的 Python,我是使用pyenv在自己的 HOME 安装了一个 Python 3.6.5。pyenv 是用于管理 Python 版本的一个组件,非常好用。它通过在 ~/.bashrc 下写入了如下配置,可以非常灵活地使用和切换任意版本的 Python。

export PATH="/home/tualatrix/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

有时候我会在本地电脑通过脚本远程管理 Server,有时用到了 Python 写的工具。这次新设置了一台 Server 后,发现 SSH 怎么也调用不了我想要调用的工具,一直显示:command not found。

我印象中 Ubuntu 的 SSH 的非交互式会话(non-interactive)是会去读 ~/.bashrc 的,既然会去读,PATH 也应该设置成功,应该能调用成功命令行才对。我反复确认、测试,都无效,只好启用了StackoverFlow大法。终于找到了原因:

Ubuntu 的 .bashrc 在开头会检测是不是非交互式(non-interactive),如果是的话,哼哼,直接 return 掉,所以后面的内容都不会被执行。

这段在开头的代码就是元凶:

# If not running interactively, don't do anything
case $- in
        *i*) ;;
            *) return;;
esac

知道原因了以后就好办了,把 PATH 的相关设置,挪到这段代码前即可。至于 Ubuntu 为啥搞这么一个 return,我想是因为 .bashrc 后面的一些设置,PS1 之类的,并不适用于非交互式的环境,所以才需要 return 掉吧。

PS:今天还遇到一个 SSH 的问题,那就是莫名的连接缓慢,后来我换了一个端口,问题解决

原文链接: http://feedproxy.google.com/~r/tualatrix/~3/qBQ0O5q1ekQ/2678.html

0     0

评价列表(0)