一个PATH引出的问题 - 交互式shell和非交换式shell区别

一个PATH引出的问题

用集群投递任务时,发现在Linux的PATH里面设置了变量 export A=“a”,  提交任务到计算节点后,发现变量$A是空,我凌乱了,于是问题来了。。。

1,任务节点配置相同,提交后怎么没了?
于是我用qrsh交互式登陆试试,看看能发现什么吗?
qrsh登陆后,发现$A=a,


发现不像是任务节点环境的问题,反正他们执行了不一样的东西,难道是非交互运行的问题,于是我做了一下确认


2,要识别一个shell是否为login shell,只需在该shell下执行echo $0:
# echo $0
如果输出为该shell名字,加上一个'-'前缀,则说明该shell为login shell。例如-bash,-su等等。
输入echo $0,得到的是"bash",说明这不是一个login shell。

经测试,任务节点确实为非交互式shell


3,于是我开始找交互式和非交换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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值