调用一个文件中有多个文件名并且必须并行运行的文件

时间:2017-02-06 14:48:47

标签: bash parallel-processing gnu-parallel

enter image description here想象一下,sample.txt文件包含多个文件名(a.sh,b.sh,c.sh ...)。我有另一个文件test.sh,我希望通过它运行sample.txt中存在的所有并行文件并获取每个文件的退出状态。 你能帮我解决这个问题吗? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

好的,我想你想要这个:

#!/usr/bin/bash
export PATH=.:$PATH

parallel -a sample.txt '{} ; if [ $? -eq 0 ]; then echo "PASS:" {}; else echo "FAIL:" {};fi'

答案 1 :(得分:0)

首先测试你可以串行运行命令:

bash sample.txt

如果失败,请先修复; GNU Parallel不会神奇地创造出以前无效的工作。

然后定义测试功能:

  tester() {
    if (eval "$@") >&/dev/null; then
      perl -e 'printf "\033[30;102m[ OK ]\033[0m @ARGV\n"' "$@"
    else
      perl -e 'printf "\033[30;101m[FAIL]\033[0m @ARGV\n"' "$@"
    fi
  }
  export -f tester

然后调用测试函数:

  parallel tester :::: sample.txt

如果您未使用bash(并且export -f上述失败),请尝试(使用版本20161022或更高版本):

  env_parallel tester :::: sample.txt

如果上面的修补程序是在bash前面加上每一行,你可以使GNU Parallel执行此操作(在这种情况下,您不需要修复sample.txt):

  parallel tester bash :::: sample.txt

要并行运行更多作业-j0。要获取实际退出代码,请使用--joblog mylog.txt并查看mylog.txt