将新目录添加到 PATH 与 PATH 中已有目录的符号链接

sbu*_*uck 12 shell bash path symlink

在设置它以便我可以从 bash 执行 Sublime Text 时,我通过不同的教程发现了两种方法:

方法 1) 从/usr/local/bin/sublSublime 的 bin 目录创建一个符号链接:

sudo ln -s /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /usr/local/bin/subl

这利用/usr/local/bin了我的 PATH 变量中已经存在的优势。

...或者...

方法 2) 更新您的 PATH 以包含 Sublime 的 bin 文件夹的路径:

export PATH="/Applications/Sublime Text.app/Contents/SharedSupport/bin/":$PATH

两者都有效,但我想知道一种方法是否比另一种更好,或者它们是否同样好?

我可能会看到的唯一优势是方法 1,如果在 PATH 目录中使用较少的目录是否有益(寻找可执行文件的速度/性能?)。

Pan*_*dya 11

如果您正在寻找直接从终端运行/执行程序/脚本作为命令的方法,那么我认为放置脚本或链接/usr/local/bin是不错的选择!

另一个优点是它已经在路径中。访问相关帖子。

但是,如果一个程序目录提供了多个可执行文件,那么我认为导出该目录的路径可能比单独创建多个符号链接有用/更好。


Bas*_*tch 6

将符号链接添加到已有的目录PATH 通常是更好的选择。

如果您希望该软件在系统范围内(对其他用户)可见,请将符号链接添加到/usr/local/bin. 如果您希望该软件只有您自己可见,请添加一次$HOME/bin/到您的PATH 目录(某些发行版将bash shell 配置为自动添加该目录(如果存在))并从中添加符号链接。

您应该避免使用很长的目录PATH(因此避免为每个新安装的应用程序在其中添加一个目录),这既是为了性能(但有些 shell 正在缓存PATH 查找,因此这可能并不那么重要),也是为了可维护性(您将拥有如果你PATH 包含几十个目录,那就一团糟);这也适用于LD_LIBRARY_PATH(所以最好添加来自$HOME/lib/...的符号链接)。

您也可以考虑使用GNU stow,它可以部分自动化该过程(几年前我尝试使用它,但觉得它不值得负担)。

最后,许多从源代码编译的软件可以配置为安装在/usr/local//usr/local/bin/ 目录之外的其他位置。对于配置有GNU autoconf设施的自由软件(即具有configureconfigure.ac...生成的脚本),您可能希望在构建时传递--prefix=$HOME/pub/ --exec-prefix=$HOME/bin/一些其他选项(例如,...)。--program-suffix=-mine

第三种方法是将可执行文件包装在一些 shell 脚本中,该脚本export是一个增强的PATH 例如使用export PATH=$PATH:/opt/something/bin....(如果可执行文件分叉更多通过 执行的内部进程,这是必要的execvp);顺便说一句,大多数 Firefox 安装都是这样做的(因此firefoxmozilla 将以 .... 结尾的 shell 脚本),或者在以-ing 完整路径exec mozilla.bin结尾的脚本中。exec所以你可以简单地添加一个小shell脚本作为$HOME/bin/sublimetext(假设$HOME/bin/ 已经在你的)包含PATH

#!/bin/sh
# file $HOME/bin/sublimetext
# if needed add export PATH=$PATH:/Applications/Sublime\ Text.app/Contents/SharedSupport/bin 
exec /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl "$@"
Run Code Online (Sandbox Code Playgroud)

$HOME/bin/subl 如果您愿意,您甚至可以命名该脚本;不要忘记使您的脚本可执行chmod u+rx $HOME/bin/subl