sbu*_*uck 12 shell bash path symlink
在设置它以便我可以从 bash 执行 Sublime Text 时,我通过不同的教程发现了两种方法:
方法 1) 从/usr/local/bin/subl
Sublime 的 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 目录中使用较少的目录是否有益(寻找可执行文件的速度/性能?)。
将符号链接添加到已有的目录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设施的自由软件(即具有configure
从configure.ac
...生成的脚本),您可能希望在构建时传递--prefix=$HOME/pub/ --exec-prefix=$HOME/bin/
一些其他选项(例如,...)。--program-suffix=-mine
第三种方法是将可执行文件包装在一些 shell 脚本中,该脚本export
是一个增强的PATH
例如使用export PATH=$PATH:/opt/something/bin
....(如果可执行文件分叉更多通过 执行的内部进程,这是必要的execvp
);顺便说一句,大多数 Firefox 安装都是这样做的(因此firefox
或mozilla
将以 .... 结尾的 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