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文件的顶部。