linux并行运算命令 linux并发执行命令

linux怎么用一步命令实现多个脚本并行执行?(run1.sh ) ; (run2.sh ) ; (run3.sh)
如果还有继续加
Linux shell编程问题(并行语句)恩 , 我也试了下,说说我的看法,
3 (tableau_OS[2]=${tableau_OS[1]})(tableau_OS[1]=${tableau_OS[2]})
注意到两个赋值语句都有小括号,这在shell的执行过程中会单独看一个子shell来运行这两个赋值,但需要注意这两个赋值对父shell没有影响 , 也就是说tableau_OS[1],tableau_OS[2]的值在父shell中并没有改变 , 为了证明这一点,可以写下面这个脚本运行
#!/bin/sh
a=1
(a=2)
echo $a
结果输出为1 。所以3的输出结果是对的
4.tableau_OS[2]=${tableau_OS[1]}tableau_OS[1]=${tableau_OS[2]}如果你想表达并的意思,我觉得应该用而不是,若用的输出结果为
Linux Windows Windows Linux~freeBSD
单独一个是把命令放入后台执行的意思 , 而非并的意思,这样的话也能解释你的那个输出结果,因为赋值被放入后台 , 并不能把赋值返回父shell,所以相当于只执行了tableau_OS[1]=${tableau_OS[2]}
希望对你有帮助
Linux下的并行神器——parallelGNU Parallel的输入源支持文件、命令行和标准输入(stdin或pipe) 。
当然 , 若不想像上面那样进行组合,可使用 --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 相反,会重复输出“背景文本” , 具体通过下面几个例子进行理解:

推荐阅读