【发布时间】:2013-09-12 00:11:54
【问题描述】:
当我为我的 OS X 编写执行一般操作的 bash 脚本时,我想知道哪里是保存它们的好地方。是否有一个目录我可以将它们全部放在它们将被自动拾取的位置?或者我应该创建自己的目录,然后从 .profile 或其他东西中引用这个目录?
【问题讨论】:
当我为我的 OS X 编写执行一般操作的 bash 脚本时,我想知道哪里是保存它们的好地方。是否有一个目录我可以将它们全部放在它们将被自动拾取的位置?或者我应该创建自己的目录,然后从 .profile 或其他东西中引用这个目录?
【问题讨论】:
通常为/usr/local/bin,除非您不希望其他用户访问它们,在这种情况下为$HOME/bin。
/usr/local/bin 可能在默认路径中,但$HOME/bin 肯定需要添加到路径中。
$HOME/bin 添加到PATH:
PATH=${PATH}:$HOME/bin
export PATH
【讨论】:
usr/local 并且运行良好,但是一旦我将它移动到我的另一个文件夹(并将该文件夹的路径添加到 $PATH)Xcode 没有找到它(换句话说,使用它的程序不再找到它)。可能是我添加路径的时候做错了
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:~/bin:/Users/dani/Documents/repos/dotfiles/bin,所以如果/Users/dani/Documents/repos/dotfiles/bin中有东西,会自动找到吗?只是为了避免 XY,我的目标是将来自 usr/local/bin 和 ~/bin 的所有脚本放在不同的文件夹中。 (sbin 的东西也是)。这有意义吗?
我的 PATH 设置为:
/usr/local/bin/usr/bin/bin/usr/sbin/sbin$HOME/bin我将/usr/local/bin 用于我拥有覆盖默认命令的命令。例如,我安装了 Subversion 1.7.7,而 OS X 带有 1.6.18。 svn 的 1.7.7 版本位于 /usr/local/bin 中,而 svn 的默认 1.6.18 版本位于 /usr/bin 中。当我输入svn 时,我得到的是我安装的版本,而不是 OS X 附带的版本。我已经用 Java、Git、Python 和其他几个二进制文件完成了这个,我需要一个与我的版本不同的版本苹果。其中大部分是符号链接。例如:
$ ls -l /usr/local/bin/ant
lrwxr-xr-x 1 root wheel 16 Jun 12 11:01 ant -> /opt/ant/bin/ant
Ant 1.9.1 安装在/opt/ant(实际上是/opt/apache-ant-1.9.1,但它象征性地链接到/opt/ant)。我将/opt/ant/bin 下的所有内容都链接到/usr/local/bin,所以它在我的路径中。
我将$HOME/bin 用于我的个人shell 脚本和其他脚本。传统上,您将其设置为 PATH 中的最后一个条目,因此您不会意外覆盖内置命令。如果我创建了一个名为 cp 的 shell 脚本命令,我不会覆盖 /bin/cp 命令。
【讨论】:
$HOME/bin 放在路径的前面,这样我就可以覆盖系统选择(而且我的路径复杂化了,因为在不同的目录中提供了多个版本的 Perl 和 GCC,并且默认为最新的版本 - 出现在 $HOME/bin 之后),但除此之外,我使用与此类似的系统。
/opt 下,然后链接。比如我有/opt/apache-ant-1.9.1,/opt/apache-ant-1.8.1,/opt/apache-ant-1.7.1我想用的那个,我链接到/opt/ant。然后,我会将/opt/ant/bin 下的二进制文件链接到/usr/local/bin。要切换版本,我只需更改/opt下的链接
$HOME/bin 保留在路径的尽头是一种传统。这是在每个人都在同一个 Unix 机器上的日子。它可能不再适用了。我使用$HOME/bin 主要用于shell 脚本和其他脚本。二进制文件安装在别处并链接到/usr/local/bin
/usr/local/bin 中的废话^H^H^H^Hstuff。在之前的工作中,我不得不忽略/usr/local/bin(不是在 Mac 上,本身),因为它由 MIS“维护”,是 NFS 安装的只读文件,并且通常包含过时的方式(如“过时') 程序——你能说 Perl 5.004 吗?
$HOME(或就此而言~)在/etc/paths 中不起作用。它需要在那里拼写出来——例如,/Users/Rax。
~/bin 用于我自己编写的可执行文件和脚本,/usr/local/bin 用于我没有自己编写的可执行文件和脚本。
/usr/local/bin 被 Homebrew、pip(以及由 Homebrew 安装的 gem 和 npm)用作 make install 的默认目标,以及一些 .pkg 安装程序。
我曾经有一个单独的目录来存放我自己没有编写的可执行文件和脚本,并且默认情况下它们没有放在/usr/local/bin 中。但它包含的文件太少,我将其中的所有文件都移到了/usr/local/bin。
我可以在 /usr/local/bin 和 find /usr/local/bin ! -lname '../Cellar/*' 中找到非 Homebrew 的东西。
我不将/usr/local/bin 用于我自己编写的脚本,因为/usr/local/bin 已经包含大约1000 个其他文件,而且~/bin(或bin)通常更容易输入。
我已将setenv PATH ~/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/libexec:/usr/texbin 添加到/etc/launchd.conf。在其他目录之前有/usr/local/bin 有潜在的危险,例如一些TextMate 命令因此而停止工作,但在系统安装版本之前有较新版本的命令并在任何地方使用相同的路径也很方便。
【讨论】:
在我看来,你可以把你的脚本放在你想要的地方。除非您使用系统特定的文件夹,否则它并不重要。我确实将我的 /scr 保留在该文件夹的 root 权限中。这很方便,因为此文件夹中的所有脚本都需要 root 访问权限才能正确执行,而且我不希望最终用户窥视该文件夹。
【讨论】: