Bash-Fehler: -bash: eval: Zeile 184: Syntaxfehler in der Nähe eines unerwarteten Tokens „(“ -bash: eval: Zeile 184: „export CONDA_PROMPT_MODIFIER=‘(base)‘“

Bash-Fehler: -bash: eval: Zeile 184: Syntaxfehler in der Nähe eines unerwarteten Tokens „(“ -bash: eval: Zeile 184: „export CONDA_PROMPT_MODIFIER=‘(base)‘“

Beim Öffnen des Ubuntu 18.06-Terminals unter Windows erhalte ich die folgende Fehlermeldung:

    bash: eval: line 184: syntax error near unexpected token `('
-bash: eval: line 184: `export CONDA_PROMPT_MODIFIER='(base) ''

Ich habe versucht, Ubuntu und Anaconda neu zu installieren, aber es scheint keinen Unterschied zu machen. Es scheint nichts in meiner .bashrc zu sein, da Zeile 184 fehlt und kein Verweis auf „CONDA_PROMPT_MODIFIER“ vorhanden ist. Ich habe meine .bashrc-Datei unten eingefügt. Irgendwelche Gedanken zu dem Problem?

meine .bashrc-Datei:

# ~/.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

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/home/lundr/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/home/lundr/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/home/lundr/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/home/lundr/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<

der Inhalt von /home/lundr/anaconda3/etc/profile.d/conda.sh (mit Code für Ausdrucke von „Gehe zu A, B usw.“) wird unten angezeigt. Beim Öffnen der Shell wird nichts ausgedruckt, beim Ausführen conda activate <environment>erhalte ich jedoch Folgendes:

Got to point J, LINENO=7
Got to point E, LINENO=9
-bash: syntax error near unexpected token `('

/home/lundr/anaconda3/etc/profile.d/conda.sh:

echo Got to point A , LINENO=$LINENO
export CONDA_EXE='/home/lundr/anaconda3/bin/conda'
export _CE_M=''
export _CE_CONDA=''
export CONDA_PYTHON_EXE='/home/lundr/anaconda3/bin/python'
echo Got to point B, LINENO=$LINENO
# Copyright (C) 2012 Anaconda, Inc
# SPDX-License-Identifier: BSD-3-Clause
echo Got to point C, LINENO=$LINENO
__add_sys_prefix_to_path() {
    # In dev-mode CONDA_EXE is python.exe and on Windows
    # it is in a different relative location to condabin.
    if [ -n "${_CE_CONDA}" ] && [ -n "${WINDIR+x}" ]; then
        SYSP=$(\dirname "${CONDA_EXE}")
        echo Got to point D, LINENO=$LINENO
    else
        SYSP=$(\dirname "${CONDA_EXE}")
        SYSP=$(\dirname "${SYSP}")
        echo Got to point E, LINENO=$LINENO
    fi
    echo Got to point F, LINENO=$LINENO
    if [ -n "${WINDIR+x}" ]; then
       echo Got to point G, LINENO=$LINENO
        PATH="${SYSP}/bin:${PATH}"
        PATH="${SYSP}/Scripts:${PATH}"
        PATH="${SYSP}/Library/bin:${PATH}"
        PATH="${SYSP}/Library/usr/bin:${PATH}"
        PATH="${SYSP}/Library/mingw-w64/bin:${PATH}"
        PATH="${SYSP}:${PATH}"
        echo Got to point H, LINENO=$LINENO
    else
        PATH="${SYSP}/bin:${PATH}"
        echo Got to point I, LINENO=$LINENO
    fi
    \export PATH
}
echo Got to point J, LINENO=$LINENO
__conda_hashr() {
    if [ -n "${ZSH_VERSION:+x}" ]; then
        \rehash
    elif [ -n "${POSH_VERSION:+x}" ]; then
        :  # pass
    else
        \hash -r
    fi
}
echo Got to point K, LINENO=$LINENO
__conda_activate() {
    if [ -n "${CONDA_PS1_BACKUP:+x}" ]; then
        # Handle transition from shell activated with conda <= 4.3 to a subsequent activation
        # after conda updated to >= 4.4. See issue #6173.
        PS1="$CONDA_PS1_BACKUP"
        \unset CONDA_PS1_BACKUP
    fi
echo Got to point L, LINENO=$LINENO
    \local cmd="$1"
    shift
    \local ask_conda
    OLDPATH="${PATH}"
    __add_sys_prefix_to_path
    ask_conda="$(PS1="$PS1" "$CONDA_EXE" $_CE_M $_CE_CONDA shell.posix "$cmd" "$@")" || \return $?
 PATH="${OLDPATH}"
    \eval "$ask_conda"
    __conda_hashr
}
echo Got to point M, LINENO=$LINENO
__conda_reactivate() {
    \local ask_conda
    OLDPATH="${PATH}"
    __add_sys_prefix_to_path
    ask_conda="$(PS1="$PS1" "$CONDA_EXE" $_CE_M $_CE_CONDA shell.posix reactivate)" || \return $?
    PATH="${OLDPATH}"
    \eval "$ask_conda"
    __conda_hashr
}
echo Got to point N, LINENO=$LINENO
conda() {
    if [ "$#" -lt 1 ]; then
        "$CONDA_EXE" $_CE_M $_CE_CONDA
    else
        \local cmd="$1"
        shift
        case "$cmd" in
            activate|deactivate)
                __conda_activate "$cmd" "$@"
                ;;
            install|update|upgrade|remove|uninstall)
                OLDPATH="${PATH}"
                __add_sys_prefix_to_path
                "$CONDA_EXE" $_CE_M $_CE_CONDA "$cmd" "$@"
                \local t1=$?
                PATH="${OLDPATH}"
                if [ $t1 = 0 ]; then
                    __conda_reactivate
                else
                    return $t1
                fi
                ;;
            *)
                OLDPATH="${PATH}"
                __add_sys_prefix_to_path
                "$CONDA_EXE" $_CE_M $_CE_CONDA "$cmd" "$@"
                \local t1=$?
                PATH="${OLDPATH}"
                return $t1
                ;;
        esac
    fi
}
echo Got to point O, LINENO=$LINENO
if [ -z "${CONDA_SHLVL+x}" ]; then
    \export CONDA_SHLVL=0
    # In dev-mode CONDA_EXE is python.exe and on Windows
    # it is in a different relative location to condabin.
    if [ -n "${_CE_CONDA+x}" ] && [ -n "${WINDIR+x}" ]; then
        PATH="$(\dirname "$CONDA_EXE")/condabin${PATH:+":${PATH}"}"
    else
        PATH="$(\dirname "$(\dirname "$CONDA_EXE")")/condabin${PATH:+":${PATH}"}"
    fi
    \export PATH

    # We're not allowing PS1 to be unbound. It must at least be set.
    # However, we're not exporting it, which can cause problems when starting a second shell
    # via a first shell (i.e. starting zsh from bash).
    if [ -z "${PS1+x}" ]; then
        PS1=
    fi
fi
echo Got to point P, LINENO=$LINENO

Antwort1

Dies ist nun schon seit fast 2 Jahren geöffnet und wurde bereits mehrfach aufgerufen. Deshalb veröffentliche ich hier die Lösung, die mir geholfen hat, für den Fall, dass sie für jemand anderen nützlich ist.

Mein Problem war, dass mein Windows-Pfad Zeichen enthielt, die Linux nicht akzeptiert. Wenn Sie in Ihrem WSL-Linux-Terminal ein „echo $PATH“ ausführen, wird der gesamte Pfad angezeigt, den WSL-Linux verwendet. Überprüfen Sie die Pfade, die von Ihrem Windows-System stammen (sie beginnen mit /mnt/windows_hard_disk_letter/...). Wenn Sie dort Zeichen haben, die Linux nicht mag (wie ungepaarte „ oder „‘ wie in meinem Fall), schlägt Ihre Conda-Exe mit dem obigen Fehler fehl.

Bereinigen Sie entweder die Windows-Pfade oder führen Sie Folgendes aus

https://stackoverflow.com/questions/51345463/syntax-error-near-unexpected-token-when-sourcing-bashrc-to-setup-openfoam-e/51672373#51672373

Schauen Sie sich auch dies an (dasselbe Konzept)

https://github.com/Microsoft/WSL/issues/3540

verwandte Informationen