我们在macOS上,使用终端运行脚本或者下载的程序的时候,可能需要使用显式路径(也就是带上路径名),而不能直接用名称使用。例如我们在网络上下载了ffmpeg程序,放在桌面上,就必须使用./Desktop/ffmpeg来使用,如果直接输入ffmpeg,就会显示-bash: /Users/xxx/Desktop/bin/ffmpeg: No such file or directory。这是因为我们的脚本或者程序所在的位置不在环境变量$PATH包含的路径中,这个问题是所有类UNIX系统都会遇到的,包括Linux。Linux上的这个问题请参阅我的另外一篇文章《Linux——如何直接使用脚本(配置$PATH变量中包含的所有bin目录)》。

macOS和Linux的解决思路是一样的,但是实施起来不太一样。

首先思路有两个,第一个方法就是让$PATH环境变量中包含程序或者脚本所在的目录;第二个方法是将程序或脚本移到$PATH环境变量包含的bin目录下。 第一个方法会导致混乱,第二个方法需要看系统的预设的目录够不够用,因为出于方便管理程序和脚本的目的,每个bin目录都有自己的用途,放在预定的目录中会整洁很多。具体请参阅《Linux/macOS上,几个常见的二进制文件目录介绍》。

我们使用echo $PATH命令查看$PATH环境变量里包含了哪些目录,我们可以将需要的程序或者脚本放入其中之一(一般是/usr/bin或者/usr/local/bin)。

但是这里我们假设这些目录我们不想用,打算在当前用户的桌面上生成一个bin目录,把程序或者脚本放在里面。新建很简单,不管是命令行还是图形化。然后我们就需要往$PATH环境变量添加新的目录,使用以下命令我们可以临时添加一下。

export PATH="$PATH:~/Desktop/bin"

但是终端关闭之后就没了。好在类UNIX系统给我们提供了解决方法。

在Linux发行版中会在用户根目录下有一个名为.bashrc的隐藏文件,我们可以将想修改或者添加的内容写在里面,每次启动的时候,Shell会自动读取这部分内容来更改环境变量等内容。
但是如果我们在macOS的用户根目录(也就是终端打开的默认目录,输入cd可以直接返回这个目录)下使用ls -a来查看所有的文件,会发现没有.bashrc,甚至会没有负责这个任务的文件存在,我们需要手动生成一个,需要注意的是,文件名称是.bash_profile,这是macOS的特色(如果有这个文件就别生成了,直接添加)。 输入以下命令来生成该文件:

touch .bash_profile

这样会生成一个空白的名为.bash_profile的文件。然后我们使用习惯的文本编辑器打开这个文件,将之前的命令复制粘贴到其中,保存,然后关闭终端重新打开来激活修改,或者使用以下命令来激活修改:

source .bash_profile

这时候我们就可以直接使用了,不要加显式路径了。