.bash_profile:赋值错误

9

我正在 Mac 上搭建 React Native 的环境,需要设置以下环境变量:

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

所以我的.bash_profile文件看起来像这样(见下文); 我担心我的不同设置的PATH变量的定义会发生冲突。

# Setting PATH for Python 3.6
# The original version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/3.6/bin:${PATH}"
export PATH

# added by Anaconda3 4.3.0 installer
export PATH="//anaconda/bin:$PATH"

# Setting PATH for Python 2.7
# The orginal version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}"
export PATH

# Setting PATH for Flutter
export PATH = /Users/juliencorbin/flutter/bin:$PATH

# Setting path for Android home (react native tools) 
export ANDROID_HOME=$HOME/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/tools/bin
export PATH=$PATH:$ANDROID_HOME/platform-tools


export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

此外,当我运行 source $HOME/.bash_profile 时,会出现以下错误:
/Users/myname/.bash_profile:16: bad assignment

我该如何处理所有这些路径分配?尤其是React Native,这是我现在最想使用的技术。

1个回答

23

错误在这一行:

export PATH = /Users/juliencorbin/flutter/bin:$PATH

Bash 将每个命令行拆分为单词,使用IFS环境变量中列出的字符作为定界符(默认定界符为<空格><制表符><换行符>)。第一个单词是要执行的命令,其余是它的参数。
上面的行被拆分成4个单词。第一个单词是export,它接收3个参数(PATH=/Users/juliencorbin/flutter/bin:...),而它只期望一个。
Bash命令和脚本中的赋值不能=运算符周围有空格字符。错误的行应该是:
export PATH=/Users/juliencorbin/flutter/bin:$PATH

去掉=周围的空格,并确保您要分配给PATH的值中没有嵌入空格。如果您放置的路径中有空格,请用引号("/Users/... ")将整个右侧值包装起来。


1
我不知道这个,非常有趣,非常感谢你的帮助@axiac!因此我有一个问题:我的PATH变量对于这些东西(Anaconda、Python、flutter等)是否正确?当我打印echo $PATH时,我觉得我得到了所有这些路径的添加:(见下面的评论) - Uj Corb
/Users/juliencorbin/.nvm/versions/node/v8.0.0/bin:/Users/juliencorbin/flutter/bin:/Library/Frameworks/Python.framework/Versions/2.7/bin://anaconda/bin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/Library/Frameworks/Python.framework/Versions/2.7/bin://anaconda/bin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/usr/local/opt/node@8/bin:/Users/juliencorbin/.yarn/bin:./bin:./node_modules/.bin:/usr/local/opt/rbenv/shims:/usr/local/opt/rbenv/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/usr/local/sbin 等等,还有 Android 路径(太长了无法粘贴全部) - Uj Corb
1
当你在终端中输入一个没有路径的命令名称(例如 ls),shell 会在 $PATH 中列出的每个路径中搜索,直到找到该命令。看起来你的 .bash_profile 被执行了两次(或者某些路径被添加到 PATH 变量中两次)。这本身并不是问题。 - axiac
好的,那太完美了。正是我想要的。非常感谢 @axiac! - Uj Corb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接