bash参考手册之三(基本的Shell特性)续三
来源:互联网 发布:淘宝返现客服回复技巧 编辑:程序博客网 时间:2024/05/22 00:52
3.2.5 协同处理
coprocess(协同处理)是在一个shell命令前面加上coproc保留字。一个协同处理在子shell中异步执行,就像以‘&’控制操作符终止的命令,同时,在正在执行的shell和协同处理之间建立一个双向的管道。
协同处理的格式是:
coproc [NAME] command [redirections]
这将创建一个名为NAME的协同处理。如果不提供NAME,默认名称为COPROC。如果command是一个简单的命令(见简单的命令),则不能提供NAME;否则,它会在简单指令的第一个单词后被中断。
当协同处理器执行时,shell在正在执行的shell上下文中创建一个名字为NAME的数组变量(见数组)。在正在执行的shell中,command的标准输出通过管道连接到一个文件描述符,该文件描述符被指定给NAME[0]。在正在执行的shell中,command的标准输入通过管道连接到一个文件描述符,该文件描述符被指定给NAME[1]。这个管道在命令指定的任何重定向之前被建立起来。该文件描述符可被用来作为shell命令的参数和重定向,可以使用标准的单词扩展。
shell为执行协同处理产生的进程ID,可以在变量NAME_PID中获得。内建命令wait可用于等待协同处理终止。
协同处理的返回状态是command的退出状态。
3.2.6 GNU并行
GNU并行,正如它的名字所暗示的,可用于并行构建和运行命令。您可以运行相同的命令,用不同的参数,不管他们是文件名,用户名,主机名,或从文件中读取的行。
完整的描述,请参阅GNU并行文档。下面举几个例子,简要介绍一下它的用途。
例如,在一个文本文件中每一行的开头增加指定的字符串:
cat file | parallel -k echo prefix_string
需要保留行的顺序的话,使用-k选项。
同样的,也可以在一个文本文件中的每一行的行尾追加指定的字符串:
cat file | parallel -k echo {} append_string
当文件的数量太大而不能使用mv来处理时,可以使并行移动当前目录中的文件:
ls | parallel mv {} destdir
正如你看到的,{}被替换成从标准输入中读取的每一行。这将运行与在当前目录中的文件数相同数量的mv命令。可以通过加入-X选项,模拟一个并行xargs:
ls | parallel -X mv {} destdir
GNU并行可以取代某些常做的操作,比如操作从文件中读取的行(在这个例子里,是文件名):
for x in $(cat list); do
do-something1 $x config-$x
do-something2 < $x
done | process-output
使用一个更紧凑的lambda表达式:
cat list | parallel "do-something1 {} config-{} ; do-something2 < {}" | process-output
并行提供了一个内置的机制来去除文件扩展名,这使其常用来批量转换文件,或文件重命名:
ls *.gz | parallel -j+0 "zcat {} | bzip2 >{.}.bz2 && rm {}"
这将使用bzip2重新压缩在当前目录中的所有文件名以.gz结束的文件。并行的在每个CPU上运行作业(-j+0)。
如果一个命令生成输出,可能要在输出中保持输入的顺序。例如,下面的命令
{ echo foss.org.my ; echo debian.org; echo freenetproject.org; } | parallel traceroute
第一个完成traceroute调用的输出将先显示。使用-k选项,
{ echo foss.org.my ; echo debian.org; echo freenetproject.org; } | parallel -k traceroute
确保首先显示traceroute foss.org.my的输出。
原文链接:http://www.gnu.org/software/bash/manual/bash.html#Coprocesses
- bash参考手册之三(基本的Shell特性)
- bash参考手册之三(基本的Shell特性)续三
- bash参考手册之三(基本的Shell特性)续一
- bash参考手册之三(基本的Shell特性)续二
- bash参考手册之三(基本的Shell特性)续四
- bash参考手册之三(基本的Shell特性)续五
- bash参考手册之三(基本的Shell特性)续六
- bash参考手册之三(基本的Shell特性)续七
- bash参考手册之三(基本的Shell特性)续八
- bash参考手册之三(基本的Shell特性)续九
- bash参考手册之六(Bash特性)续三
- bash参考手册之五(shell变量)续三
- bash参考手册之四(shell内建命令)续三
- Linux学习笔记之基本命令三(Bash Shell)
- bash参考手册之六(Bash特性)续一
- bash参考手册之六(Bash特性)续二
- bash参考手册之六(Bash特性)续四
- bash参考手册之六(Bash特性)续五
- android 修改actionbar title文字颜色等属性
- 【Tiptop ERP M】Tiptop GP ERP ASF生产管理系统
- ubuntu go install
- 思考-------拿得起-放得下
- 每日一笑
- bash参考手册之三(基本的Shell特性)续三
- javascript复习3:Date && Array
- WPF 实现主从的datagrid以及操作rowdetailtemplate 的方法
- 配置无线路由器
- 把数据中心搬入“空间站”
- jsp强制下载
- 元芳您对江西市场怎么看-2013年1月江西IDC排行榜与综述
- CodeSmith 使用教程(11) 引用其它文件或.Net 类库
- 深度解析Java内存的原型