我刚找到了一个解决方案,可以解决在安装了MacPorts版本的Python后,Sublime Text 3的subl
命令出现的问题。指南说要将软链接ln-s
放入/bin中的命令行应用程序中。但那没起作用,所以我只是打开了我的 ~/.profile 然后添加了别名:alias subl="/Applications/path/to/subl"
。但这引发了新的问题:别名和软链接之间有什么区别?
我刚找到了一个解决方案,可以解决在安装了MacPorts版本的Python后,Sublime Text 3的subl
命令出现的问题。指南说要将软链接ln-s
放入/bin中的命令行应用程序中。但那没起作用,所以我只是打开了我的 ~/.profile 然后添加了别名:alias subl="/Applications/path/to/subl"
。但这引发了新的问题:别名和软链接之间有什么区别?
别名是一种Macintosh Finder概念。在Finder中创建别名时,Finder会跟踪它。当您移动原始文件或文件夹时,别名会跟随它。
符号链接是Unix文件系统的概念。创建符号链接时,它仅指向原始位置。移动原始位置后,符号链接将指向空地址。
当您使用Mac应用程序并使用“打开/保存”对话框时,它会处理别名,因为它使用Finder API,并且Finder处理别名跟踪。
Unix工具无法与Finder API集成,因此无法跟踪别名。但是,它们可以使用底层的Unix API来处理符号链接。您可以在符号链接上使用“ls”,因为它使用的是Unix API。Python也是如此。
在System 7/8/9时代,文件系统无法处理符号链接,就像Windows API使用快捷方式而不是符号链接一样。你需要别名。
但是,Mac OS X是基于Unix的操作系统,因此了解符号链接的概念。现在,Finder将符号链接视为别名(除了符号链接不会在原始位置移动时更新)。别名唯一的理由是与旧的Finder文件系统兼容。
set -xv
,则无法看到别名被替换。 - David W.尽管在本例中它们可以用于类似的目的,但它们是完全不同的东西。
这个:
alias subl="/Applications/path/to/subl"
创建别名,这样在命令行中键入subl
与键入/Applications/path/to/subl
等效。subl() { /Applications/path/to/subl ; }
这两个东西都是特定于 shell 的;它们使 shell 将 sub1
扩展为指定的命令。
ln -s
则在文件系统中创建一个符号链接。符号链接是对另一个文件的引用,对于大多数目的,它可以被视为文件本身。它适用于任何访问它的内容,不仅限于 shell,它会立即对系统上运行的所有进程可见,并持久存在直到它被删除。(符号链接被实现为包含目标文件名称的小型特殊文件。)
这确实是一个超级问题
在这场辩论中,有三个别名的级别
一些不同的用例:
个人而言,我经常使用ln -s ..
我也经常使用Finder 创建别名。它很容易,链接会随着物品的移动而改变位置。但是它无法从bash中工作-因此,当我需要开始编写脚本时,我有时将这些链接更改为**ln -s ...*
别名仅存在于shell(Bash、Sh、Zsh等)的上下文中,但在其他应用程序中找不到,而ln -s
创建一个虚拟文件(即链接),指向一个现有的真实文件,它可以像新命令一样呈现自己,并且大多数调用其他二进制文件的应用程序都能识别它。别名类似于函数和变量,只是它们更像命令模板。创建函数实际上更值得推荐。
alias mumble="substitution"
的形式,这将导致您键入的任何以mumble开头的命令被替换为substitution。所以如果你在配置文件中输入的是alias subl="/Applications/path//to/subl"
,那么每当你在命令开头键入subl时,它都会被完整路径替换。
ln
通过在文件系统中从一个东西到另一个东西创建引用来工作。ln
无法与MacPorts提供的Python版本一起使用。编辑:另一个评论让我意识到我提到的别名是特定于Mac的“finder”别名,而这里讨论的别名是bash“shell”别名。我的错误。
符号链接或软链接指向文件系统上的位置:路径。如果位于该路径的文件或文件夹被移动或重命名,则软链接现在将指向无用的内容。
别名可以包含对路径或文件ID的引用,也可以两者都有,具体取决于实现方式。至少在Mac OS X上,默认值为两者都有,但路径优先于文件ID。也就是说,只要别名所引用的路径存在某些内容,您的别名就会指向该路径,就像符号链接一样。但是,如果别名所引用的路径上不存在任何内容,则它将指向原始文件ID。
例如:
假设您创建了一个文件,然后通过指定文件路径为其创建了一个别名。现在,别名包含文件的文件ID以及文件的路径。默认情况下,别名将按照文件的路径跟随您到达该文件。
如果您现在将文件移动到其他位置,则别名将通过引用文件的文件ID跟随它。但是,如果您将新文件分配给与旧文件相同的文件路径,则别名现在将指向新文件,因为它更青睐于路径而不是文件ID。
alias
命令。例如,请参阅LINFO上的The alias Command。这与OS X和MacOS环境中“alias”的非常不同含义形成对比。例如,请参阅维基百科上的Alias (Mac OS)。 - tkp