在spark bin下面load-spark-env.sh脚本里,有以下语句:

  if [ -f "${user_conf_dir}/spark-env.sh" ]; then
# Promote all variable declarations to environment (exported) variables
set -a
. "${user_conf_dir}/spark-env.sh"
set +a
fi

对set -a不是很了解,所以做了以下小试验。

有两个shell脚本,test.sh如下:

#!/usr/bin/env bash
set -a
SPARK_HOME=aaaa
set +a
STORM_HOME=cccc echo $SPARK_HOME
echo $STORM_HOME ./test2.sh echo $SPARK_HOME
echo $STORM_HOME

test2.sh如下:

#!/usr/bin/env bash

echo $SPARK_HOME
echo $STORM_HOME
SPARK_HOME=ddd
STORM_HOME=EEE

运行test.sh结果如下:

aaaa
cccc
aaaa aaaa
cccc

可以看到set -a中的SPARK_HOME能够在另外一个bash中访问。其实这就是set -a意义所在,它将当前变量导出,使得其他的bash中运行的脚本也能够访问改变量,但是与export不同的是只能访问,不能修改。

另外如果不用set -a,其实可以通过子shell也可以访问,而不修改,但是这样做使得所有父shell中的变量都能够被子shell访问到,不能做到有范围的控制。

即如果把test.sh修改如下:

#!/usr/bin/env bash
set -a
SPARK_HOME=aaaa
set +a
STORM_HOME=cccc echo $SPARK_HOME
echo $STORM_HOME (. ./test2.sh) echo $SPARK_HOME
echo $STORM_HOME

输出结果如下:

aaaa
cccc
aaaa
cccc
aaaa
cccc

  

小结:其实shell中的门道还是很多的,只是作为一个脚本,平时不怎么重视,碰到不懂得,多试验一下就好了。 

参考文献:http://stackoverflow.com/questions/9772036/pass-all-variables-from-one-shellscript-to-another

最新文章

  1. VS2015+Win10 调试DirectX 报错
  2. 转载一篇关于unicode字符编码的文章
  3. go sample - mongodb
  4. C++指针之防不胜防
  5. java基础介绍(转)
  6. VI打开和编辑多个文件的命令 分屏操作
  7. post from传值
  8. Linux下对于inode的理解
  9. ubuntu压缩解压
  10. 【翻译】使用Visual Studio创建Asp.Net Core MVC (一)
  11. BZOJ_4867_[Ynoi2017]舌尖上的由乃_分块+dfs序
  12. Git Sever搭建与相关错误处理
  13. 写SQL语句常见的问题
  14. [python]解决Windows下安装第三方插件报错:UnicodeDecodeError: 'ascii' codec can't decode byte 0xcb in position 0:
  15. TVS(瞬间电压抑制器)
  16. 2018/03/25 每日一个Linux命令 之 df
  17. java的(PO,VO,TO,BO,DAO,POJO)类名包名解释
  18. jQuery制作水平多级下拉菜单
  19. Microsoft Orleans 之安装
  20. Java学习笔记之:Java Servlet 过滤器配置

热门文章

  1. python之练习-三层菜单
  2. JVM(三):深入分析Java字节码-上
  3. sqlalchemy多表联合查询的左连接、右连接等使用
  4. k-d树及八叉树
  5. Django学习系列之中间件
  6. Linux学习系列之memcached
  7. ubuntu下vi的使用
  8. 扩展GCD 中国剩余定理(CRT) 乘法逆元模版
  9. vue之父子组件之间的通信方式
  10. ZOJ3662:Math Magic(全然背包)