一个PATH引出的问题 - 交互式shell和非交换式shell区别
2017-03-03 23:46
302 查看
一个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配置,在其中发现了下面一段代码
也是就是说,如果非交互shell,就return了。下面的代码就不运行了。
于是呢,我把$A=“a”放在上这部分代码的前面,那非交换shell应该也能运行了
经测试,发现推理无问题。解决问题
参考链接 http://www.2cto.com/os/201507/416675.html
参考链接 http://blog.chinaunix.net/uid-26918227-id-4938474.html
用集群投递任务时,发现在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
相关文章推荐
- Rose中与Path Map有关的一个问题
- 安装Oracle10g后出现的一个path问题?
- 由一个性能问题引出的.net概念
- linux中Cron执行shell的一个问题(子shell的调用方法)
- FreeBSD上Enter full pathname of shell or RETURN for /bin/sh 问题的解决
- 朋友的一个问题:Linux开机如何自动运行自己编写好的shell脚本
- 登陆shell与交互式非登陆shell的区别
- 一个由sizeof引出的有意思的问题
- [shell] 一个printf 打印 8 进制码的问题
- 一个C笔试题引出一系列的问题
- VC8实现的一个PC端查看TSK主题文件的工具,以及由其引出的VC8MFC程序脱离.net框架分发问题
- 一个shell的问题
- 解析 Java 类和对象的初始化过程(由一个单态模式引出的问题谈起)
- "java.lang.NoClassDefFoundError"错误——一个关于classpath设置的问题
- Delphi中创建类的实例与定义一个变量引出的问题
- 一个容易混淆的问题:JSP中getParameter与getAttribute有何区别?
- 瞎折腾引出的一个windows系统管理问题
- Do You Know?Url Path MaxLength Limit -- 你或许以后会遇到的一个问题
- shell 脚本中将输出内容赋值给一个变量时的换行问题
- 交互式shell和非交互式shell、登录shell和非登录shell的区别