linux并行执行命令 linux并发执行命令的方式

linux怎么用一步命令实现多个脚本并行执行?(run1.sh ) ; (run2.sh ) ; (run3.sh)
如果还有继续加
如何运行linux shell程序编写好的shell脚本(如:test),可以采取两种方式进行运行:\x0d\x0a一、 $ sh test\x0d\x0a一般不采用这种调用方式,尤其不采用“shtest”的调用方式,因为这种方式将禁止shell读取标准输入 。\x0d\x0a也可以采用 $ ksh test\x0d\x0a这种方式要求shell具有“可读”的访问权限 。\x0d\x0a二、直接运行可执行的shell脚本之前,首先应使用下列chmod命令,把shell脚本文件设置为可执行的文件 。\x0d\x0achmod 755 test(除文件属主可写之外 , 每个用户均具有读和可执行的访问权限)\x0d\x0achmod +rxtest(同上)\x0d\x0achmod u+rx test(只有文件属主具有读和执行的访问权限)\x0d\x0a按照上述要求设置shell脚本文件的访问权限后 , 可采用下列方式,直接运行shell脚本了 。\x0d\x0a1、test(如果命令检索路径包含当前目录)\x0d\x0a2、./test(如果命令减缩路径不包含当前目录)\x0d\x0a*说明: sh test 方式调用一个shell叫蹦可能会禁止某些shell特定的扩展功能,因而可能引起脚本无法正确执行 。
Linux下的并行神器——parallelGNU Parallel的输入源支持文件、命令行和标准输入(stdin或pipe) 。
【linux并行执行命令 linux并发执行命令的方式】 当然,若不想像上面那样进行组合 , 可使用 --xapply 参数从每一个源获取一个参数(或文件一行),这个参数有些类似R中的函数,具有广播作用——如果其中一个输入源的长度比较短,它的值会被重复 。
GNU Parallel可以通过 --arg-sep 和 --arg-file-sep 指定分隔符替代 ::: 或 ::::,当这两个符号被其它命令占用的时候会特别有用 。
GNU Parallel默认把一行做为一个参数:使用 \n 做为参数定界符 。可以使用 -d 改变:
GNU Parallel支持通过 -E 参数指定一个值做为结束标志:
GNU Parallel使用--no-run-if-empty来跳过空行:
如果parallel之后没有给定命令,那么这些参数会被当做命令:
此外,命令还可以是一个脚本文件,一个二进制可执行文件或一个bash的函数(须用 export -f 导出函数)
GNU Parallel支持多种替换字符串,默认使用 {},使用 -I 改变替换字符串符号 {} 。其最常见的字符串替换包括以下几种: {.},去掉扩展名; {/} ,去掉路径,只保留文件名; {//},只保留路径; {/.} ,同时去掉路径和扩展名; {#} ,输出任务编号 。同时对于每一个字符串替换都可以自己指定符号: -I 对应 {} ; --extensionreplace 替换{.} ; --basenamereplace 替换{/} ; --dirnamereplace 替换 {//} ; --basenameextensionreplace 替换{/.} ; --seqreplace 替换{#}。
同时,如果有多个输入源时,可以通过 {编号} 指定某一个输入源的参数:
使用--header把每一行输入中的第一个值做为参数名 。
使用 --colsep 把文件中的行切分为列,做为输入参数 。
--xargs 会在一行中输入尽可能多的参数(与参数字符串长度有关) , 通过 -s 可指定一行中参数的上限 。
为了获得更好的并发性,GNU Parallel会在文件读取结束后再分发参数 。
GNU Parallel 在读取完最后一个参数之后,才开始第二个任务,此时会把所有的参数平均分配到4个任务(如果指定了4个任务) 。
第一个任务与上面使用--xargs的例子一样,但是第二个任务会被平均的分成4个任务,最终一共5个任务 。(奇怪的是我的结果与教程的结果不一样)
替换字符串可以是输出字符的一部分,使用 -m 参数表示每个job不重复输出“背景”(context) ,  -X 则与 -m 相反 , 会重复输出“背景文本”,具体通过下面几个例子进行理解:

推荐阅读