所以终端查找命令的地方很少。这些地方存储在您的$PATH 变量中。将其视为终端迭代以查找任何命令的全局变量。这通常是二进制文件,看看 /bin 文件夹通常是如何被引用的。
/bin 文件夹里面有很多可执行文件。原来这是命令。这个不同的文件夹位置存储在一个全局变量中,即$PATH,由:分隔
现在通常安装后的程序会负责更新PATH 并告诉您的终端嘿我可以是我的bin 文件夹中的所有命令。
事实证明 MySql 在安装时并没有这样做,所以我们必须手动进行。
我们通过以下命令来做,
export PATH=$PATH:/usr/local/mysql/bin
如果你把它分解,export 是不言自明的。把它想象成一个任务。所以export 是一个变量PATH,其值为旧$PATH 与新bin 相结合,即/usr/local/mysql/bin
这样执行后/usr/local/mysql/bin 中的所有命令都可供我们使用。
这里有一个小问题。将一个终端窗口视为程序的一个实例,并且可能像 $PATH 这样的东西是类变量(可能)。请注意,这是纯粹的假设。所以在关闭时我们失去了新的任务。如果我们重新打开终端,我们将无法再次访问我们的命令,因为上次导出时,它存储在易失性的主内存中。
现在我们需要在每次使用终端时导出 mysql 二进制文件。所以我们必须坚持 concat 在我们的道路上。
您可能知道我们的终端使用名为dotfiles 的东西在终端初始化时加载配置。我喜欢将其视为每次创建终端的新实例时传递给构造函数的一组东西(再次假设但接近它可能正在做的事情)。所以是的,现在你明白我们要做什么了。
.bash_profile 是已知的主要dotfile 之一。
所以在下面的命令中,
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> ~/.bash_profile
我们正在做的是保存echo的结果,即输出字符串到~/.bash_profile
所以现在正如我们上面提到的,每次我们打开终端或终端实例时,我们的dotfiles 都会被加载。所以.bash_profile 被分别加载,我们上面附加的export 被运行,因此我们的全局$PATH 得到更新,我们得到/usr/local/mysql/bin 中的所有命令。
附:
如果您没有直接运行第一个命令导出,而只是运行第二个命令以保持它?对于当前正在运行的终端实例,您必须这样做,
source ~/.bash_profile
这告诉我们的终端重新加载该特定文件。