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