$PATH 在 Mac 上的终端中究竟如何工作以及 .zshrc 文件究竟如何影响它?

How exactly does $PATH work in Terminal on Macs and how exactly does .zshrc file influence it?

我是 Mac 的编程新手,我很难理解终端如何与 $PATH 和 .zshrc 文件相关的工作。

先说明一下:我正在使用 Macbook Pro 14 运行 连接 M1 Pro,并且正在尝试编程。 我一直在经历 Flutter 安装和设置过程,在某些时候,我正在学习的教程告诉我通过将路径添加到我的 .zshrc 文件来声明我的 Flutter SDK 的路径。我也是这样做的:

export PATH=$HOME/dev/tooling/flutter/bin:$PATH

我保存了文件并重新启动了终端并尝试调用 flutter doctor 并且它有效 - 太棒了,我的手臂在空中快乐地挥舞着。注释掉添加的路径意味着当我在 .../flutter/bin 目录之外工作时,我不能再通过键入 flutter 在终端中调用它 - 对我来说很有意义。

在教程后面的某个地方,我被指示安装 Java,所以我安装了。我在 ARM 架构上为 Macs 运行ning 安装了 Azul 的 Zulu Java,然后我再次被告知要在我的 .zshrc 文件中声明 Java 的路径:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-18.jdk/Contents/Home

我这样做我调用 java 并尝试调用 java -version,它们都有效。

现在,问题从下一步开始

在下一步中,我被告知安装 Android Studio,我照做了。然后我返回到终端和 运行 flutter doctor,它突出显示 Android 工具链是一个问题,并扩展为 cmdline-tools component is missing。我进行了搜索,找到了关于在 Android Studio > System Settings > [=80 中勾选 Android SDK Command-line Tools 的建议解决方案=] SDK > SDK Tools,然后声明两个名为 toolsplatform-tools 的文件夹。 我按照指示做了,但最终,我最终用错误的语法声明了它,最重要的是,我意识到当我勾选 [ 时我没有点击 apply =80=] Android Studio 中的 SDK 命令行工具。那么我的 .zshrc 文件看起来像这样:

export PATH=$HOME/dev/tooling/flutter/bin:$PATH

export JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-18.jdk/Contents/Home

export PATH=$HOME/Library/Android/sdk/tools
export PATH=$HOME/Library/Android/sdk/platform-tools

在我保存 .zshrc 文件并重新启动终端后,none 的命令立即被识别。不是 flutter 也不是 flutter doctor 也不是 javajava -version;甚至 vim ~/.zshrc。 我挠了挠头,重新打开.zshrc文件,注释掉最后两行新添加的内容,重启终端,瞧,又好了。

为了增加混乱,然后我将我的 .zshrc 文件编辑为如下所示(第二行代码是故意用我现在知道的不正确语法编写的,以查看它会产生什么影响):

export PATH=$HOME/dev/tooling/flutter/bin:$PATH

export PATH=$HOME$PATH:$HOME/Library/Android/sdk/tools
#export JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-18.jdk/Contents/Home

#export PATH=$HOME/Library/Android/sdk/tools
#export PATH=$HOME/Library/Android/sdk/platform-tools

并调用 flutterflutter doctor 不起作用;但是调用 javajava -version 确实如此(这让我相信我的行声明 java 的路径是毫无意义的)。但是当我重新编辑我的 .zshrc 文件时,它看起来像这样:

export PATH=$HOME/dev/tooling/flutter/bin:$PATH

#export PATH=$HOME$PATH:$HOME/Library/Android/sdk/tools
#export JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-18.jdk/Contents/Home

export PATH=$HOME/Library/Android/sdk/tools
export PATH=$HOME/Library/Android/sdk/platform-tools

none 的命令有效 - 不是 flutter 也不是 flutter doctorjava

这是怎么回事?我很困惑。我猜这与 $PATH 在活动代码行中的位置有关,但我不太明白。

这是一个很长的读物,可能是一个非常愚蠢的问题,但如果我无法深入了解它,它会吞噬我,哈哈。提前致谢!

当你做一个

export PATH=$HOME/Library/Android/sdk/tools

你破坏了旧的设置(即 $HOME/dev/tooling/flutter/bin:$PATH)。我会改写

path+=(~/Library/Android/sdk/tools)

这会将新目录附加到现有 PATH。