Chinaunix首页 | 论坛 | 博客
  • 博客访问: 152204
  • 博文数量: 27
  • 博客积分: 531
  • 博客等级: 一等列兵
  • 技术积分: 332
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-25 18:31
文章分类

全部博文(27)

文章存档

2015年(4)

2014年(3)

2013年(6)

2012年(14)

我的朋友

分类: LINUX

2015-10-30 14:45:08

最近在学习一些hadoop的知识,在看到spark时,遇到一段费解的脚本,如下:

点击(此处)折叠或打开

  1. CMD=()
  2. while IFS= read -d '' -r ARG; do
  3.     CMD+=("$ARG")
  4. done < <("$RUNNER" -cp "$LAUNCH_CLASSPATH" org.apache.spark.launcher.Main "$@")
  5. exec "${CMD[@]}"

刚看到时完全不知道是啥意思,之后一步一步的翻译,总算有点明白了,写下了作为记录也作为分享。解释如下:

CMD=()
该语句在bash中定义一个空的数组

CMD+=("${ARG}")
即向数组中追加内容

while IFS= read -d '' -r ARG; do
其中IFS制定的是分割符,该语句置为空,IFS变量是bash的内置变量,详见 blog.csdn.net/whuslei/article/details/7187639

done < <("$RUNNER" -cp "$LAUNCH_CLASSPATH" org.apache.spark.launcher.Main "$@")
主要在该句,("$RUNNER" -cp "$LAUNCH_CLASSPATH" org.apache.spark.launcher.Main "$@") 的输出作为while的输入,一行一行的被读入,这里要注意的是两个小于号(<)之间是有一个空格的,如果没有空格会是here文档了。

exec "${CMD[@]}"
执行CMD,其中${CMD[@]}将展开整个数组,各项以空格分开

对上述的while做一个简化,例子如下

点击(此处)折叠或打开

  1. while read i; do echo $i; done < <(echo "PWD")
大家可以再shell命令行直接执行看看效果

~~end~~
阅读(1925) | 评论(0) | 转发(0) |
0

上一篇:关于SSLSocketFactory

下一篇:spark应用提交

给主人留下些什么吧!~~