【问题标题】:calling shell commands from code by design?通过设计从代码中调用 shell 命令?
【发布时间】:2011-12-27 08:25:57
【问题描述】:

Unix 哲学教导我们应该开发能做好一件事的小程序。它还教导我们应该将政策与机制分开。我想一种方法是先设计一个基于文本的 shell 命令,然后在此基础上构建一个 gui(如果需要)。

我真的很喜欢可以将小程序组合(通过管道连接)成更复杂系统的想法。我也喜欢这样一个事实,即简单、专注的设计理论上应该比将所有规则绑定在一起的单一系统需要更少的维护。

编写一些程序(例如在 Ruby 或 Python 中)将它的一些功能降级为直接从代码调用的 shell 命令会有多好?更进一步,故意设计一个旨在直接从代码(编译或脚本)调用的 shell 命令是否有意义?显然,这只有在 shell 命令有一些有价值的控制台使用时才有意义。

根据我的经验,我不能说这是我经常看到的一种做法。更多时候,特定于任务的代码依赖于特定于任务的库。当然,我可能不知道的是,我使用了实际上只是外壳命令包装器的库。 (或者更确切地说,shell 命令是某个库的包装器。)

【问题讨论】:

  • 我在微服务出现之前就问过这个问题。如果我今天问,我可能会得到不同的答案。

标签: ruby linux unix console-application


【解决方案1】:

unix 范式是模块化的。你应该把你的程序写成一堆模块,然后如果你愿意,可以将它们提取到多个程序中。但是,每当您想进行函数调用时执行一个新程序既慢又不切实际。

【讨论】:

  • +1,UNIX 哲学的核心是将模块化和可组合性作为概念。如果某些 Ruby 模块/类可以独立运行,您始终可以将其功能公开为命令行和 Ruby 库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-13
  • 2011-10-16
  • 2011-10-24
  • 2013-04-13
  • 1970-01-01
相关资源
最近更新 更多