【问题标题】:What is the difference between an application and a command?应用程序和命令有什么区别?
【发布时间】:2014-08-11 10:20:12
【问题描述】:

应用程序和命令有什么区别?例如关于which 命令。两者都是/包含可执行文件。

OSX 中的某些可执行文件是“命令”,旨在从命令行运行(例如 cat、less、python)。其他可执行文件包含在应用程序包中(Preview、Idle)。两者之间有什么逻辑上的区别吗?

一方面,OS X 中的 unix which 命令似乎是这样认为的: 当我在 OSX 终端中使用which 命令时,我希望能够找到我的应用程序(例如)Preview.app。 但以下均不返回任何结果:
$which Preview
$which Preview.app

但是
$which python
确实返回
/usr/bin/python

但另一方面,这种排除应用程序和包含命令的做法似乎是任意的。运行Idle(应用程序)和python 的结果几乎相同。

应用程序和命令之间的区别仅仅是传统吗?即 /Applications 文件夹传统上没有放入 PATH 变量中,但没有理由不能包含它?

【问题讨论】:

  • which 与您正在考虑的那种应用程序无关。我不知道你从哪里得到这样的印象。它是关于命令的,是的,它依赖于PATH
  • Ken 我认为这很接近:应用程序与命令不同。
  • 它们之间的区别仍然是我无法理解的。两者都是或包含可执行文件,并且都可以执行简单的任务或更复杂的任务,例如调用环境/解释器。在命令提示符下键入 python 会导致与运行 Python 附带的 Idle.app 非常相似的事情。这个例子似乎跨越了命令和应用程序。
  • 您不应该从命令行运行大多数捆绑的应用程序。您可以以这种方式运行它们,但它可能会产生不好的副作用。例如,在应用程序中运行可执行文件总是会创建应用程序的新实例。并非所有应用程序都能处理同时运行的多个实例。此外,很少有应用程序是在命令行上进行交互的,向 stdout 产生有用的输出,或通过 stdin 获取输入。您是否正在寻找open 命令?
  • /Applications 放入PATH 将无济于事。应用程序包的可执行文件隐藏在其中,通常位于Foo.app/Contents/MacOS/Foo。命令仅在PATH 中列出的目录内搜索立即,而不是在其子目录中搜索。 /Applications 内通常没有任何命令。

标签: macos command-line terminal path


【解决方案1】:

which 告诉你命令运行的东西在哪里。如果该命令没有正常运行,which 无法告诉您 - 例如,当我在命令行中键入 Preview 时,什么也没有发生 - 这就是为什么 which 什么都不返回。

来自哪个手册页:

which 实用程序获取命令名称列表,并在路径中搜索在实际调用这些命令时将运行的每个可执行文件。

【讨论】:

  • 我认为这是真的,但它没有解释为什么。是因为预览根本不在路径中吗?还是因为它是一个应用程序,而不是一个命令?
猜你喜欢
  • 1970-01-01
  • 2023-01-26
  • 2019-08-29
  • 2011-11-23
  • 1970-01-01
  • 2015-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多