首页 > 解决方案 > shell `time` 命令并行执行的正确顺序

问题描述

我需要执行下面的命令(作为脚本的一部分),但我不知道按什么顺序放置东西才能正确执行。我想要做的是将file.smt2作为 optimathsat 的输入 执行它,获取执行时间。但我希望使用所有 CPU 内核并行执行多次。

parallel -j+0 time Desktop/optimathsat-1.5.1-macos-64-bit/bin/optimathsat < file.smt2 &>results.csv 

#!/bin/bash -x在文件开头添加了查看正在发生的事情,这是输出:

+ parallel -j+0 time file.smt2
parallel: Warning: Input is read from the terminal. You are either an expert
parallel: Warning: (in which case: YOU ARE AWESOME!) or maybe you forgot.
parallel: Warning: ::: or :::: or -a or to pipe data into parallel.

...从第一行,我可以看出顺序是错误的。从第 2,3 和 4 行开始,缺少语法。我怎样才能解决这个问题?

标签: macosshellgnu-paralleloptimathsat

解决方案


所以我认为你不关心结果,而只关心时间:

seq $(parallel --number-of-threads) |
  parallel -j+0 -N0 --joblog my.log 'Desktop/optimathsat-1.5.1-macos-64-bit/bin/optimathsat < file.smt2'
cat my.log

-N0插入 0 个参数。

考虑阅读 GNU Parallel 2018(印刷版在线版)——至少第 1+2 章。你的命令行会感谢你的。


推荐阅读