以最简单的形式,程序是否只运行终端命令?

以程序中的示例为例,它允许我选择一个文件夹并将其复制到另一个位置,从根本上说,应用程序运行的命令是我可以在无法治愈的情况下运行的,还是它利用一些内部 OS API 来进行重定位?

请保存我任何恶毒的回应; 我只是好奇并且完全注意到它可以被视为一个 13 岁的孩子会问的问题。

18
2022-06-07 14:38:56
资源 分享
答案: 5

Unix 背后的一个了不起的想法是(曾经),如果你对某个程序有建议,那么你会首先将它写成一个 shell 脚本——基本上是调用一系列命令。

在那之后,如果程序显示出有价值,你可能会增强它的用户界面,让个人测试它,最后,当你被说服它应该得到它时,编写一个“真正的”程序。

这显然是在 icon 控制之前,所以这里的“程序”本身就是一个 CLI 命令。

您仍然可以在某些现代程序中看到这种策略,特别是当它们显示系统详细信息时。 想要开发一个简单的应用程序来列出文件夹中的所有文档? 只需运行 ls -al,解析结果并显示一个表格。 享受各种参数的美好时光,并且您拥有 2.0 版的产品

2
2022-06-07 15:07:00
资源

运行无法治愈的命令的一类程序(尽管所有这些都以 API 调用开始)是集成程序 - 高级环境,例如 eclipse 或 Xcode。 程序增长所需的工具集合非常庞大,无法包含在 IDE 中,也无法保存在 IDE 中。 相反,它开发了一个 makefile(一种脚本)并使用 unix 'make'(或等效的)运行它,以逐步执行编译、链接、加载和调试过程。 随后,Make 利用它们的命令行界面运行编译器、链接器等。 这允许 IDE 相对独立于开发人员选择的设备集,并且与设备更新无关。

1
2022-06-07 15:06:01
资源

我很害怕解决方案是“这取决于,但通常是第二个”。 实际上,即使 GUI 程序正在运行终端命令,它也是通过调用 API 来运行它们的。

仅包含终端命令列表的程序称为 shell 脚本。 此类程序可以在 Mac OS X 中运行,但如果您打算查看其结果,它们需要在终端窗口中运行或发布使用 GUI 的程序。 其他程序可以通过内部 API 调用命令行程序。

虽然许多增长查询是本网站的主题,但实际上有一个实例是主题 - 主题涉及运行 Automator。

在 Automator 中生成的程序可以调用的内部命令列表中的一种选择是调用 shell 手稿或终端命令列表的能力。 然而,这只是其内部 API 中提供的几种选择之一。

5
2022-06-07 15:05:43
资源

从概念上讲,它不断地使用 OS API——关心的是使用什么方法。 基本上有3个选项。

  1. 直接使用低度OS API(系统调用)。 在您的示例中,任务相当重要:获取文件夹中事物的清单,检查类型(文件夹,数据 ),为他们每个人在目标文件夹中创建等价的东西,数据从源读取内容,写入目标数据等由于工作如此复杂,很容易出错,所以大多数应用程序都会当然要防止这种情况。

  2. 使用简化任务的库 (API)。 例如,Apple Cocoa 框架为 NSFileManager 类提供了 copyItemAtPath:toPath:error 方法,该方法使用简化的 OS API 完成所有繁重的工作,因此应用程序本身不需要使用低级 API,但可以依赖于不需要的东西工作并且始终存在于系统中。 此外,Apple 可能会确保它运行良好。

  3. 利用外部程序来完成任务。 在这种情况下,外部程序将使用上述两种方法来完成这项工作。 应用程序需要启动这样的过程,监视它并等待它完成。 此类过程很可能可以作为命令行工具运行,因此这很可能是您可以在终端中运行的命令。 不能保证,但确实可行。

许多应用程序肯定会使用替代方案 2。因为它比 1 简单得多。并且比 3 更安全和高效。为了运行外部程序,您需要适当地设置它,并且您无法控制什么确实如此。 例如,在失败的情况下要弄清楚到底出了什么问题要困难得多,而且很难知道它在做什么(例如显示进度)。 这就是为什么大多数情况下开发人员可能会选择替代方案 2,但没有保证。 一个值得注意的例子是使用 shell 脚本进行个性化的应用程序 - 例如安装程序。

高级用户注意事项:您可以利用 OS X 的 dtrace 工具来了解特定应用程序在做什么。 例如,您可以检查它正在生成的任何类型的进程,以便查看它正在使用的工具(请参阅 execsnoop)。

11
2022-06-07 15:05:31
资源

应用程序可以运行 CLI 命令来执行特定任务,有些确实可以; 然而,出于对有效性的考虑,专业的应用程序程序员不会运行该命令,而是使用蜜蜂该命令用于执行所需任务。

1
2022-06-07 15:04:43
资源