.bash_profile中意外标记“ then”附近的语法错误

时间:2019-12-10 03:00:21

标签: bash syntax-error

在设置-vx之后; @ dash-o

每个评论的来源〜/ .bash_profile
mbp:~ pyop$ set -vx ; source ~/.bash_profile
+ source /Users/pyop/.bash_profile
export PATH="$PATH:/Users/pyop/Library/Python/2.7/bin/:/Users/pyop/Library/Python/3.6/bin/:/Users/pyop/miniconda3/bin:/Users/# export PATH="$GOPATH/bin:$PATH"evault vault.bash.inc' && source '/Users/pyop/google-cloud-sdk/completion.bash.inc'
-bash: /Users/pyop/.bash_profile: line 1: syntax error near unexpected token `then'
-bash: /Users/pyop/.bash_profile: line 1: `export PATH="$PATH:/Users/pyop/Library/Python/2.7/bin/:/Users/pyop/Library/Python/' export PATH="$GOPATH/bin:$PATH"evault vault.bash.inc' && source '/Users/pyop/google-cloud-sdk/completion.bash.inc'
mbp:~ pyop$

下面是@Gordon Davisson每个用户评论的LC_ALL = C cat -v〜/ .bash_profile

mbp:~ pyop$ LC_ALL=C cat -v ~/.bash_profile
LC_ALL=C cat -v ~/.bash_profile
+ LC_ALL=C
+ cat -v /Users/pyop/.bash_profile
export PATH="$PATH:/Users/pyop/Library/Python/2.7/bin/:/Users/pyop/Library/Python/3.6/bin/:/Users/pyop/miniconda3/bin:/Users/pyop/miniconda2/bin:/usr/local/opt/rabbitmq/sbin:$PATH"^M^Mexport CLICOLOR=1^Mexport LSCOLORS=GxFxCxDxBxegedabagaced^M^Mexport PATH=/Users/pyop/Library/Android/sdk/platform-tools:$PATH^M^Malias subl='open -a "Sublime Text"'^Malias bash_profile_reset="source ~/.bash_profile"^Malias vcode='open -a "Visual Studio Code"'^Malias chrome='open -a "Google Chrome"'^Malias intel='open -a "IntelliJ IDEA"'^M^Malias runelixir="iex -S mix run"^M^Mexport PATH="/Users/pyop/terraform:$PATH"^M^Mexport PATH="/usr/local/opt/ruby/bin:$PATH"^Mexport GEM_HOME=/Users/pyop/.gem^Mexport PATH="$GEM_HOME/bin:$PATH"^M^Mexport NVM_DIR="$HOME/.nvm"^M^M. $HOME/.asdf/asdf.sh^M^M. $HOME/.asdf/completions/asdf.bash^M^Mexport PATH="$HOME/.cargo/bin:$PATH"^M^Mexport WORKON_HOME=~/.virtualenvs^Msource /usr/local/bin/virtualenvwrapper.sh^Mexport PATH="/usr/local/opt/curl-openssl/bin:$PATH"^Meval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib=$HOME/perl5)"^Mif which rbenv > /dev/null; then eval "$(rbenv init -)"; fi^M^M# The next line updates PATH for the Google Cloud SDK.^M# -f '/Users/pyop/google-cloud-sdk/path.bash.inc' && source '/Users/pyop/google-cloud-sdk/path.bash.inc'^M^M# The next line enables shell command completion for gcloud.^M# -f '/Users/pyop/google-cloud-sdk/completion.bash.inc' && source '/Users/pyop/google-cloud-sdk/completion.bash.inc'^M^Mcomplete -C /Users/pyop/terraform/vault vault^M# export GOPATH=/Users/pyop/gocode^M# export GOPATH=$GOPATH^M# export PATH="$GOPATH/bin:$PATH"^Mmbp:~ pyop$

下面是简单的源〜/ .bash_profile之后的

-bash: /Users/pyop/.bash_profile: line 1: syntax error near unexpected token `then'
-bash: /Users/pyop/.bash_profile: line 1: `export PATH="$PATH:/Users/pyop/Library/Python/2.7/bin/:/Users/pyop/Library/Python/3.6/bin/:/Users/pyop/miniconda3/bin# -f '/Users/pyop/google-cloud-sdk/path.bash.inc' && source '/Users/pyop/google-# -f '/Users/pyop/google-cloud-sdk/completion.bash.inc' && source '/Users/pyop/g' export PATH="$GOPATH/bin:$PATH"evault vault

上方是源〜/ .bash_profile之后的读数

下面是我的.bash_profile

在安装go之前,我一直在使用该文件没有问题,现在它有问题。

我已删除并注释掉了其中的一部分,但没有成功。

感谢您的帮助。

export PATH="$PATH:/Users/pyop/Library/Python/2.7/bin/:/Users/pyop/Library/Python/3.6/bin/:/Users/pyop/miniconda3/bin:/Users/pyop/miniconda2/bin:/usr/local/opt/rabbitmq/sbin:$PATH"

export CLICOLOR=1
export LSCOLORS=GxFxCxDxBxegedabagaced

export PATH=/Users/pyop/Library/Android/sdk/platform-tools:$PATH

alias subl='open -a "Sublime Text"'
alias bash_profile_reset="source ~/.bash_profile"
alias vcode='open -a "Visual Studio Code"'
alias chrome='open -a "Google Chrome"'
alias intel='open -a "IntelliJ IDEA"'

alias runelixir="iex -S mix run"

export PATH="/Users/pyop/terraform:$PATH"

export PATH="/usr/local/opt/ruby/bin:$PATH"
export GEM_HOME=/Users/pyop/.gem
export PATH="$GEM_HOME/bin:$PATH"

export NVM_DIR="$HOME/.nvm"

. $HOME/.asdf/asdf.sh

. $HOME/.asdf/completions/asdf.bash

export PATH="$HOME/.cargo/bin:$PATH"

export WORKON_HOME=~/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
export PATH="/usr/local/opt/curl-openssl/bin:$PATH"
eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib=$HOME/perl5)"
if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi

# The next line updates PATH for the Google Cloud SDK.
# -f '/Users/pyop/google-cloud-sdk/path.bash.inc' && source '/Users/pyop/google-cloud-sdk/path.bash.inc'

# The next line enables shell command completion for gcloud.
# -f '/Users/pyop/google-cloud-sdk/completion.bash.inc' && source '/Users/pyop/google-cloud-sdk/completion.bash.inc'

complete -C /Users/pyop/terraform/vault vault
# export GOPATH=/Users/pyop/gocode
# export GOPATH=$GOPATH
# export PATH="$GOPATH/bin:$PATH"

2 个答案:

答案 0 :(得分:1)

发布的bash脚本没有问题。这很有可能是由于引用了其他bash脚本的结果:asdf.bash,asdf.sh,virtualenvwrapper.sh,...

执行“ set -vx;源〜/ .bash_profile”应该有助于缩小问题

答案 1 :(得分:1)

cat -v的输出建议您仅使用回车符作为行尾来格式化文件。这是不寻常的。有关行尾的更多信息,请参见wiki newline。检查用于创建和/或编辑文件的编辑器的编码和设置是明智的。您也可以尝试使用十六进制编辑器或使用hexdump -C检查文件。

Bash解析期望仅将换行符用作行尾的文件。由于bash找不到换行符,因此他将整个文件解析为一行。

要将所有回车符替换为换行符,可以使用tr

tr '\r' '\n' < ~/.bash_profile > tempfile
mv tempfile ~/.bash_profile

或者例如使用gnu sed:

sed -i -e 's/\r/\n/g' ~/.bash_profile

您的文件可能使用dos行尾进行格式化-即。回车符和换行符都用于表示行尾-但是您将cat -v的输出错误地复制到了问题。使用dos2unix实用工具或类似sed -i -e 's/\r//' ~/.bash_profile之类的工具,将回车符+换行符的序列转换为单个换行符。