gsa*_*ras 3 bash path shell-script environment-variables
每次登录我们公司的集群,先拿到Kerberos票据,然后尝试提交作业,但是找不到spark-ubmit:
-bash-4.1$ ./pipeline.runtime/scripts/vpspark-submit.sh crow-env/ /user/gsamaras/crow_spm-1.0.2.3.tar.gz --properties-file $SPARK_CONF_PROPERTIES --num-executors 1 foo.py
./pipeline.runtime/scripts/vpspark-submit.sh: line 51: spark-submit: command not found
Run Code Online (Sandbox Code Playgroud)
但是,如果我提供 .bashrc,它就可以正常工作。
>> cat .bashrc
[ -f /etc/bashrc ] && . /etc/bashrc
export PATH=${SPARK_HOME}/bin:$PATH
export SPARK_CONF_DIR=~/tripodrt-spark/conf/
export SPARK_CONF_PROPERTIES=~/tripodrt-spark/conf/spark-overrides-tt.conf
Run Code Online (Sandbox Code Playgroud)
为什么?我希望 .bashrc 在登录时运行。我使用的是红帽企业 Linux。
从bash
手册:
启动非登录 shell 的交互式 shell 时,如果该文件存在,则
bash
读取并执行来自 的命令~/.bashrc
。
所以如果你的shell是登录shell,~/.bashrc
是不会被读取的。
我把补充PATH
的~/.bash_profile
替代,和/或可能源~/.bashrc
来自那里。
一些 shell 区分两种或三种类型的 shell 初始化文件:
对于bash
:
~/.bash_profile
~/.bashrc
$BASH_ENV
指向什么。将配置文件启动脚本与交互式 shell 读取的脚本分开的目的是让您一劳永逸地为所有未来的 shell 会话执行(可能是繁重的)设置任务。这通常涉及设置PATH
最小值,但也包括任何其他导出的变量(即环境变量)。
交互式 shell 初始化脚本(~/.bashrc
在 的情况下bash
)然后只需要执行交互式 shell 专门需要的操作。这包括设置PS1
不应导出的shell 变量,以及定义别名和函数等。您还应该设置需要为此会话设置的环境变量以及此会话中的任何启动进程,例如GPG_TTY
( GPG_TTY="$(tty)"
)重新使用 GnuPG。
我倾向于source $HOME/.bashrc
从我的~/.bash_profile
设置PATH
和调整我umask
想要的方式之后,让我~/.bashrc
设置历史文件变量,PS1
提示,PAGER
以及EDITOR
一些别名和函数等等。(那是半个谎言;如果我能找到它,我实际上 exec
是ksh93
从我的个人资料中找到外壳的,但如果我找不到,我会继续使用bash
)。我也使用renice我的壳在交互式shell初始化文件(renice -n 4 $$
),因为我经常一个共享的机器与其他人的负载,需要的CPU比我还多(不过这只是我)的工作。
该ksh93
外壳采用
~/.profile
~.kshrc
(或任何$ENV
指向)ksh93
比bash
它知道有一个交互式登录 shell 这样的东西要理智一点,所以它$ENV
在阅读~/.profile
.
该pdksh
外壳也读~/.kshrc
了非交互shell,这让我很烦,(和休息,我使用了一些重要的脚本),所以我有
case $- in
*i*) ;;
*) return ;;
esac
Run Code Online (Sandbox Code Playgroud)
在我的~/.kshrc
文件的顶部。