【问题标题】:Execute commands in a csv file (bash / Mac)在 csv 文件中执行命令(bash / Mac)
【发布时间】:2017-10-16 16:21:35
【问题描述】:

我有一个csv 文件,其中包含命令行中的一堆命令。我可以 bash 这个 csv 文件,但命令将在同一个终端中按顺序执行。有没有办法在单独的终端中执行这些命令中的每一个,以便它们并行执行?

例子:

就像:

python args1
python args2
...
python argsn

【问题讨论】:

  • 你可以把每个命令放在后台吗?还有这个stackoverflow.com/questions/4404242/…
  • 这是另一个需要检查的问题:stackoverflow.com/questions/989349/…
  • 您的 CSV 文件究竟是什么样的?一般来说,您不应该简单地执行它,因为字段分隔符不应被视为参数的一部分。
  • 那是一个 CSV 文件吗?
  • 嗯?为什么要将 bash 命令与 csv 混合在一起?

标签: bash macos csv


【解决方案1】:

如果您想在 Mac 上进行任何严肃的软件开发,我建议您安装 homebrew,因为 Apple 不提供包管理器,但提供了大多数人使用的所有工具的旧版本使用... Python, sed, PHP, Perl, awk, find, grep, make, git...

一旦您拥有 homebrew,我会推荐您可以安装的 GNU Parallel

brew install parallel

一旦您拥有 GNU Parallel,您就可以通过以下方式并行运行您的命令:

parallel --dry-run -a commands.csv

或者,也许您想要标有名称的行:

parallel --tag -a commands.csv

如果您希望一次运行 8 个,请添加 -j 8。如果您想要预计到达时间(何时完成),请添加 --eta 等等。


顺便说一句,您可以寻找其他工具,例如 Intel TBB,使用:

brew search tbb

或 pango,带有:

brew search pango

【讨论】:

  • 我的荣幸。祝你的项目好运,记住问题和答案,在 StackOverflow 上是免费的,所以如果你遇到困难,请回来。
  • 它应该向您显示它将执行的命令。如果它们看起来正确,您应该再次运行,但删除 --dry-run
  • 输出可能被缓冲。这些工作需要很长时间吗?
  • 您可以尝试添加--line-buffer--ungroup 以更快获得输出。也可以添加--job-log YourLog.txt获取日志文件。
【解决方案2】:

你基本上已经有了一个 shell 脚本。唯一的区别是,您不想将其作为一个脚本运行,而是希望将每一行作为单独的命令运行。打开新终端的方式在某种程度上取决于操作系统,但我们假设您只使用xterm 命令。以下将您的脚本commands.csv(或任何名称)视为数据文件。

while IFS= read -r cmdline; do
    xterm -e sh -c "$cmdline" &
done < commands.csv

【讨论】:

  • (刚刚注意到您标记了问题osx;检查您将如何使用标准终端应用程序而不是xterm。)
  • 是的。但是,根据文件中的行,将会有一些棘手的引用问题需要解决。
  • 谢谢解答,我会努力实现的。
【解决方案3】:

你可以像在后台运行命令

run-command &
run-some-other-command &
etc &

这是你可以使用的东西吗?

【讨论】:

    猜你喜欢
    • 2013-10-31
    • 2014-08-27
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 2014-04-19
    相关资源
    最近更新 更多