我正在设置某些环境变量以使命令pyspark
正常工作。当我设置变量/etc/environment
并获取它时,它不起作用。但是,当我在命令行中设置它们时,它们确实可以工作,但当然仅适用于本次会话。我的目的是将它们设置为全局,这样即使我重新打开会话我也可以输入pyspark
在/etc/environment中设置
[root@localhost ~]# more /etc/environment
[root@localhost ~]# echo "export SPARK_HOME=/srv/spark" >> /etc/environment
[root@localhost ~]# echo "export PATH="$SPARK_HOME"/bin:"$PATH >> /etc/environment
[root@localhost ~]# echo "export JAVA_HOME=/usr/lib/jvm/jre-1.7.0-openjdk" >> /etc/environment
[root@localhost ~]# source /etc/environment
[root@localhost ~]# pyspark --version
-bash: pyspark: command not found
在命令行上设置
[root@localhost ~]# export SPARK_HOME=/srv/spark
[root@localhost ~]# export PATH=$SPARK_HOME/bin:$PATH
[root@localhost ~]# export JAVA_HOME=/usr/lib/jvm/jre-1.7.0-openjdk
[root@localhost ~]# pyspark --version
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 1.6.1
/_/
Type --help for more information.
答案1
将export SPARK_HOME=...
等命令放入 shell 的启动文件中。对于 bash,这将是~/.profile
或~/.bash_profile
。
在Linux上,/etc/environment
通常在登录时读取pam_env.so
,并且不支持扩展现有变量,因此设置PATH=$PATH:/something
将导致文字字符串$PATH
出现在您的PATH
.这不是你想要的。 (参见例如这和这,也为了好玩这.)
此外,设置PATH
可能/etc/environment
不起作用,因为 shell 的全局启动脚本可能会重写它们。 (默认情况下,它们在 Debian 上执行,在我手边的旧 CentOS 上执行,启动脚本似乎只放在前面PATH
)。
如果您的系统不使用pam_env.so
,但您仅手动获取脚本,那么这些考虑因素当然并不重要。但看起来它至少被几个 Linux 发行版广泛使用,因此使用另一个文件名可能是个好主意。
(因为这与其他答案所说的完全相反,所以我在旧的 CentOS 上测试了它。)
我将以下内容放入/etc/environment
:
export FOO1=bar
export FOO2=foo:$FOO
再次登录后set | grep FOO
显示:
FOO1=bar
FOO2='foo:$FOO'
答案2
这行代码并不符合您的想法:
echo "export PATH="$SPARK_HOME"/bin:"$PATH >> /etc/environment
问题是$SPARK_HOME
正在评估期间echo
(按原样$PATH
;您可能不希望您的当前的该文件中的路径)。
如果你cat /etc/environment
会发现这条线看起来不正确。
相反,使用
echo 'export PATH="$SPARK_HOME/bin:$PATH"' >> /etc/environment
这将在您创建文件时使用$SPARK_HOME
和的值。$PATH
source