【问题标题】:What is the difference between $PATH and $fpath?$PATH 和 $fpath 有什么区别?
【发布时间】:2013-12-25 09:44:16
【问题描述】:

当我输入 echo $PATHecho $FPATH 时,我得到不同的输出。 $PATH$FPATH有什么区别?

我使用 Mac OSX Mavericks。

【问题讨论】:

  • 为什么你期望两个不同的变量包含相同的值?
  • 小心那里的大写小写字母。 Shell 变量区分大小写,所以PAThPATH 是不同的东西。

标签: macos path


【解决方案1】:

类 Unix 系统上的所有 shell 都会搜索 PATH 以查找作为子进程运行的可执行文件。

Korn shell(ksh) 在FPATH 中搜索定义要在当前进程中加载​​和执行的 shell 函数的文件。

Z shell (zsh) 在fpath 中搜索定义要在当前进程中加载​​和执行的 shell 函数的文件。见Autoloading Functions

【讨论】:

【解决方案2】:

FPATH 是函数定义的搜索路径。

FPATH 函数定义的搜索路径。当引用具有 -u 属性的函数并且未找到命令时,将在此路径中的目录中搜索与函数或命令同名的文件。如果找到具有该命令名称的可执行文件,则在当前环境中读取并执行该文件。与 PATH 不同,当前目录必须由 .而不是通过相邻的:字符或开头或结尾:。

-- 来自mac developer library

除了被ksh 使用,正如@robmayoff 在他的answer 中指出的那样。 zsh 也使用它。

【讨论】:

    【解决方案3】:

    两者是不同的环境变量,它们的值可能不一样。

    另外,请参阅有关 environment variables 的链接

    FPATH Contains a list of directories that the z/OS shell searches to find shell functions.

    PATH Defines the default command path.

    【讨论】:

    • PATH 中将某些功能公开为函数或简单地作为可执行脚本有什么区别?
    • 你的意思是在PATH中指定函数名吗?函数定义将存储在哪里以及如何获取?在哪种语言功能中?将是bashcshzsh
    • 不,我的意思是:“我想要功能 X。我应该在 PATH 的可执行文件中实现该功能,还是应该在函数中实现该功能?”。每个的用例是什么?
    • 这取决于用例。如果功能 X 将是单独的命令或可执行文件,那么您可以创建一个新的可执行文件并将其复制到 PATH 中的现有路径之一。或者将包含可执行文件的路径添加到 PATH 变量中。
    • 一般情况下,可能无法在PATH 的可执行文件中实现。并非所有文件都在您的控制之下。在PATH 的函数内部实现非常困难(通过函数,我的意思是shell 中的函数)。因为在这里,您必须在 shell 中定义源代码。但是,在配置文件中定义函数非常容易(例如~/.bashrc~/.bash_profile~/.zshrc 等),然后该函数将可供该特定用户使用。如果你想要所有用户,那么你需要写一个shell文件并包含在PATH的标准路径中。
    猜你喜欢
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 2018-01-02
    • 2011-05-21
    • 1970-01-01
    相关资源
    最近更新 更多