$PATH和$fpath之间有什么区别?

22
当我键入echo $PATHecho $FPATH时,我得到不同的输出。 $PATH$FPATH之间有什么区别?
我使用Mac OSX Mavericks操作系统。

4
为什么你期望两个不同的变量包含相同的值? - Mat
2
注意大小写字母的使用。Shell变量是区分大小写的,因此PAThPATH是不同的东西。 - janos
3个回答

16

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

FPATH是函数定义的搜索路径。当引用带有 -u 属性的函数时,或者命令未找到时,在此路径中查找与函数或命令同名的文件。如果找到了一个同名的可执行文件,那么它将在当前环境中被读取和执行。与 PATH 不同,必须显式地表示当前目录为“.”,而不是通过相邻的 ":" 字符或开头或结尾的 ":" 来表示。

-- 来自Mac 开发者库

除了像 @robmayoff 在他的答案中所指出的那样由 ksh 使用外,zsh也使用它。


4
在类Unix系统上,所有shell会在PATH中搜索可用于作为子进程运行的可执行文件。
Korn shell (ksh)会在FPATH中搜索一个定义了shell函数的文件,用于在当前进程中加载并执行。
Z shell (zsh)会在fpath中搜索一个定义了shell函数的文件,用于在当前进程中加载并执行。请参阅自动加载函数

2
小写的 fpath 在 zsh 中肯定有特殊含义:http://zsh.sourceforge.net/Doc/Release/Functions.html - JKesMc9tqIQe9M

1

这两个是不同的环境变量,它们的值可能不相同。

此外,请参阅关于环境变量的链接。

FPATH 包含一个目录列表,z/OS shell 用于查找 shell 函数。

PATH 定义默认命令路径。


将某些功能公开为函数或仅作为可执行脚本放在“PATH”中有何区别? - Rafael Eyng
你的意思是在PATH中指定函数名称吗?函数定义将被存储在哪里,并且如何被引用?该函数使用哪种语言?是bashcsh还是zsh - doptimusprime
不,我的意思是:“我想要拥有X功能。我应该在PATH中实现可执行文件的功能,还是应该在函数内部实现功能?”每个选项的使用情况是什么? - Rafael Eyng
这取决于使用情况。如果功能X将是单独的命令或可执行文件,则可以创建一个新的可执行文件并将其复制到PATH中的现有路径之一。或者将包含您的可执行文件的路径添加到PATH变量中。 - doptimusprime
一般来说,在PATH中无法实现可执行文件,因为并非所有文件都在您的控制之下。在PATH中实现函数(指shell中的函数)非常困难,因为您必须在shell中进行定义。但是,在配置文件(如 ~/.bashrc, ~/.bash_profile, ~/.zshrc 等)中定义函数将非常容易,那样该函数就可以供该特定用户使用。如果要使所有用户都能使用,则需要编写一个shell文件并将其包含在标准PATH路径中。 - doptimusprime

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接