69

当我为我的 OS X 编写执行一般操作的 bash 脚本时,我想知道哪里是保存它们的好地方。是否有一个目录我可以将它们全部放在它们将被自动拾取的位置?或者我应该创建自己的目录,然后从 .profile 或其他东西中引用这个目录?

4

4 回答 4

80

通常/usr/local/bin,除非您不希望其他用户访问它们,在这种情况下$HOME/bin

/usr/local/bin可能在默认 PATH 中,但$HOME/bin肯定需要添加到 PATH。


添加$HOME/bin到路径:

PATH=${PATH}:$HOME/bin
export PATH
于 2013-09-08T09:56:17.130 回答
18

我的 PATH 设置为:

  • /usr/local/bin
  • /usr/bin
  • /bin
  • /usr/sbin
  • /sbin
  • $HOME/bin

我使用/usr/local/bin用于覆盖默认命令的命令。例如,我安装了 Subversion 1.7.7,而 OS X 带有 1.6.18。的 1.7.7 版本svn在,/usr/local/bin而默认的 1.6.18 版本svn/usr/bin. 当我输入 时svn,我得到的是我安装的版本,而不是 OS X 附带的版本。我已经使用 Java、Git、Python 和其他几个二进制文件完成了这项工作,我需要一个与我的 Mac 上不同的版本。其中大部分是符号链接。例如:

$ 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 中的最后一个条目,因此您不会意外覆盖内置命令。如果我创建了一个名为 的 shell 脚本命令cp,我不会覆盖该/bin/cp命令。

于 2013-09-08T14:55:06.590 回答
11

~/bin用于我自己编写/usr/local/bin的可执行文件和脚本以及我自己没有编写的可执行文件和脚本。

/usr/local/bin被 Homebrew 使用,pip(并且gemnpmHomebrew 安装),作为 的默认目标make install,并且被一些.pkg安装程序使用。

我曾经有一个单独的目录来存放我自己没有编写的可执行文件和脚本,并且/usr/local/bin默认情况下没有放置这些目录。但它包含的文件太少,我将其中的所有文件都移到了/usr/local/bin.

我可以/usr/local/binfind /usr/local/bin ! -lname '../Cellar/*'.

我不使用/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 命令因此而停止工作,但在系统安装版本之前拥有较新版本的命令并在任何地方使用相同的路径也很方便。

于 2013-09-08T16:49:21.213 回答
-7

在我看来,你可以把你的脚本放在你想要的地方。除非您使用系统特定的文件夹,否则它并不重要。我确实将我的 /scr 保存在该文件夹的 root 权限中。这很方便,因为此文件夹中的所有脚本都需要 root 访问权限才能正确执行,而且我不希望最终用户窥视该文件夹。

于 2013-09-08T13:52:37.940 回答