![源 ~/.bashrc:不是有效的标识符](https://linux22.com/image/1166749/%E6%BA%90%20~%2F.bashrc%EF%BC%9A%E4%B8%8D%E6%98%AF%E6%9C%89%E6%95%88%E7%9A%84%E6%A0%87%E8%AF%86%E7%AC%A6.png)
我想在 Ubuntu WSL 上安装 Anaconda,当我想通过运行命令来激活安装时source ~/.bashrc
,出现以下错误:
-bash: export: `.~/.bashrc': not a valid identifier
运行后cat ~/.bashrc
我得到:
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth
# append to the history file, don't overwrite it
shopt -s histappend
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar
# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color|*-256color) color_prompt=yes;;
esac
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fi
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
*)
;;
esac
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
# Add an "alert" alias for long running commands. Use like so:
# sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
export PATH="$PATH":/home/marwa/anaconda3/bin .~/.bashrc
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/home/marwa/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/home/marwa/anaconda3/etc/profile.d/conda.sh" ]; then
. "/home/marwa/anaconda3/etc/profile.d/conda.sh"
else
export PATH="/home/marwa/anaconda3/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<
export PATH="$PATH":/home/marwa/anaconda3/bin .~/.bashrc
export PATH="$PATH":/home/marwa/anaconda3/bin . /home/marwa/.bashrc
然后我运行diff {/etc/skel,~}/.bashrc
,我得到:
117a118,136
> export PATH="$PATH":/home/marwa/anaconda3/bin .~/.bashrc
>
> # >>> conda initialize >>>
> # !! Contents within this block are managed by 'conda init' !!
> __conda_setup="$('/home/marwa/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
> if [ $? -eq 0 ]; then
> eval "$__conda_setup"
> else
> if [ -f "/home/marwa/anaconda3/etc/profile.d/conda.sh" ]; then
> . "/home/marwa/anaconda3/etc/profile.d/conda.sh"
> else
> export PATH="/home/marwa/anaconda3/bin:$PATH"
> fi
> fi
> unset __conda_setup
> # <<< conda initialize <<<
>
> export PATH="$PATH":/home/marwa/anaconda3/bin .~/.bashrc
> export PATH="$PATH":/home/marwa/anaconda3/bin . /home/marwa/.bashrc
有什么问题?
答案1
您似乎手动编辑了.bashrc
与 Anaconda 安装无关的内容,但我不能 100% 确定,因为我猜想 Anaconda 安装程序中的错误(或以不寻常的方式运行)可能会导致这种情况。这可能完全不是您的本意(见下文)。
.bashrc
在 Anaconda 自动添加的代码前面有这一行:
export PATH="$PATH":/home/marwa/anaconda3/bin .~/.bashrc
在自动添加的 Anaconda 代码后,您会看到以下两行:
export PATH="$PATH":/home/marwa/anaconda3/bin .~/.bashrc
export PATH="$PATH":/home/marwa/anaconda3/bin . /home/marwa/.bashrc
您只需删除所有这三行即可。一种方法是备份文件,然后编辑它nano
:
cp ~/.bashrc ~/.bashrc.old
nano ~/.bashrc
进入编辑器后,找到这些行并将其删除。然后保存文件并退出。
如果您愿意,备份和编辑都可以以图形方式进行。您可以使用图形文件浏览器制作备份副本,并使用您喜欢的任何图形文本编辑器(例如 Gedit)来编辑文件。(只是不要使用文字处理器。)
严格来说,这是那里描述的情况但我发布了这个答案,因为这是一个有点特殊的情况,因为您应该只删除错误的export
行,而不必尝试修复甚至替换它们。上面的说明确定了哪些行应该删除,并说如何删除它们。本节将解释原因。
您应该删除这三行而不是尝试保留其中任何一部分的原因是它们做了两件事,其中一件事是不必要的,另一件事是错误的并且会导致错误。它们是不必要的,因为 Anaconda 添加的代码已经放在/home/marwa/anaconda3/bin
您的 中$PATH
。它们是错误的,因为您不应该将.~/.bashrc
、.
或/home/marwa/.bashrc
作为参数传递给export
命令。
该export
命令用于导出 shell 变量,以便它们成为 shell 运行的程序的环境变量。传递给它的每个参数可以采用两种形式:不带等号的名称,导出该名称的变量;名称后跟等号和值,将值分配给该名称的变量并导出变量。由于 、 或 中没有符号,因此=
您尝试导出这些名称的变量。它们不是有效的变量名,因此您会收到错误。.~/.bashrc
.
/home/marwa/.bashrc
除非您记得.bashrc
自己手动编辑过,否则您可能想知道为什么会出现这些行。我相信出现此问题的最可能方式是,如果您尝试使用类似命令将不必要的行添加export PATH="$PATH":/home/marwa/anaconda3/bin
到.bashrc
(不需要,因为 Anaconda 的安装程序已经处理了这个问题),echo 'export PATH="$PATH":/home/marwa/anaconda3/bin'
并尝试通过运行 ... 在当前 shell 中应用更改. ~/.bashrc
,但最终意外地将. ~/.bashrc
或原本应该出现的某些内容添加到命令末尾export
,可能多次。