一个PATH引出的问题
用集群投递任务时,发现在Linux的PATH里面设置了变量 export A=“a”, 提交任务到计算节点后,发现变量$A是空,我凌乱了,于是问题来了。。。
1,任务节点配置相同,提交后怎么没了?于是我用qrsh交互式登陆试试,看看能发现什么吗?
qrsh登陆后,发现$A=a,
发现不像是任务节点环境的问题,反正他们执行了不一样的东西,难道是非交互运行的问题,于是我做了一下确认
# echo $0
如果输出为该shell名字,加上一个'-'前缀,则说明该shell为login shell。例如-bash,-su等等。
输入echo $0,得到的是"bash",说明这不是一个login shell。
经测试,任务节点确实为非交互式shell
当bash以login shell启动时,
它会执行/etc/profile中的命令,然后/etc/profile调用/etc/profile.d目录下的所有脚本;然后执行~/.bash_profile,~/.bash_profile调用~/.bashrc,最后~/.bashrc又调用/etc/bashrc。
当以非login方式启动时,
它会调用~/.bashrc,随后~/.bashrc中调用/etc/bashrc,最后/etc/bashrc调用所有/etc/profile.d目录下的脚本。
于是我查看~/.bashrc 中的$A配置,在其中发现了下面一段代码
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
也是就是说,如果非交互shell,就return了。下面的代码就不运行了。
于是呢,我把$A=“a”放在上这部分代码的前面,那非交换shell应该也能运行了
经测试,发现推理无问题。解决问题
参考链接 http://www.2cto.com/os/201507/416675.html
参考链接 http://blog.chinaunix.net/uid-26918227-id-4938474.html