命令在主目录中工作,但不在其他任何地方

时间:2021-05-02 21:50:23

标签: macos flutter zsh macos-big-sur

我正在尝试在运行 Bir Sur 11.2.3 的 Mac Mini 上设置开发环境。我可以向 .zshrc 文件添加命令,但它们似乎只能在我的主目录中工作。例如...

chris@chriss-mac-mini an_app % which flutter dart
flutter not found
dart not found

chris@chriss-mac-mini an_app % cd ~

chris@chriss-mac-mini ~ % which flutter dart
dev/flutter/bin/flutter
dev/flutter/bin/dart

我的 .zshrc 文件看起来像这样...

chris@chriss-mac-mini ~ % cat .zshrc
export PATH="$PATH:dev/flutter/bin"

为什么我在本机其他目录下无法使用flutter命令?

2 个答案:

答案 0 :(得分:1)

export PATH="$PATH:dev/flutter/bin" 正在引用相对路径。

dev/flutter/bin 应该类似于 /Users/<user>/dev/flutter/bin

在终端中,转到 flutter bin 文件夹的目录并键入 pwd。这是它应该引用的完整路径。

答案 1 :(得分:1)

简短回答:将 .zshrc 中的行更改为:

>>> import decimal
>>> decimal.getcontext().prec = 256
>>> from decimal import Decimal as D
>>> from numpy import float32 as f32
>>> a = D(f32("6.0847234e31").astype(float))
>>> b = D(f32("3.4028235e38").astype(float))
>>> res_act = (a+b).sqrt()
>>> res_calc = D(f32("1.8446744e19").astype(float)) # 2*sqrt(a/4 + b/4) in f32 precision
>>> res_best = D(f32("1.8446746e19").astype(float)) # obtained by brute-force
>>> abs(res_calc - res_act) > abs(res_best - res_act)
True # oops

长答案:您添加到 export PATH="$PATH:$HOME/dev/flutter/bin" 环境变量 PATH 的路径不以“/”开头,因此它是一个相对路径,意思是'将相对于您当前工作目录所在的位置进行解析。如果您在 dev/flutter/bin(或任何您的主目录)中,它将解析为 /Users/cjmcqueen,这可能是实际二进制文件所在的位置。但是如果您在 /Users/cjmcqueen/dev/flutter/bin 中,它会解析为 /random/other/path,它甚至可能不存在(更不用说包含 /random/other/path/dev/flutter/binflutter 等的二进制文件)命令)。

要解决此问题,您需要为二进制文件添加完整的绝对路径,而不是相对路径。在某些情况下,dart 会扩展到您的主目录的路径(因此 ~ 会起作用),但并非在所有情况下。在这种特殊情况下,~/dev/flutter/bin 更好,因为在将它存储在 $HOME 变量中之前,shell 会将它扩展到您的主目录的绝对路径,因此您不必必须依靠其他东西来解决它。