【问题标题】:Why is bash still searching for conda?为什么 bash 仍在搜索 conda?
【发布时间】:2019-12-31 05:31:20
【问题描述】:

我有一台安装了 Ubuntu 16.04 LTS 的 PC。另外,我已经安装了 Anaconda python 发行版。 所以,我在安装pathos 后遇到了这个 Invalid archive 错误(类似于这个issue)(我不确定它是否导致了这个错误)。在尝试了很多解决问题后,我终于放弃了。我认为最好卸载 Anaconda。我尝试按照here(选项B)中的步骤进行操作。但它只是卡住了。因此,我停止了这个过程。 在此之后,我尝试了选项 A here (我的 .bash_profile 文件不存在 bash: /home/tejas/.bash_profile: No such file or directory)。 但是当我在终端中输入“conda”时,我得到了

bash: /home/tejas/anaconda3/bin/conda: No such file or directory

表示该 bash 仍在尝试查找 conda?

此外,我还执行了来自this question 的任何额外命令。

编辑 1:.bash_aliases 为空。

bash: /home/tejas/.bash_aliases: No such file or directory

编辑 2:'type -a conda' 的结果 '''

conda is a function
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

}

'''

我的./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: 
quot e=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 GOPATH=$HOME/gopath
export PATH=$GOPATH:$GOPATH/bin:$PATH

编辑 3:

tejas@tejasHP:~$ grep -F 'CONDA_EXE' ~/.[!.]*
grep: /home/tejas/.adobe: Is a directory
grep: /home/tejas/.anaconda: Is a directory
grep: /home/tejas/.atom: Is a directory
grep: /home/tejas/.cache: Is a directory
grep: /home/tejas/.compiz: Is a directory
grep: /home/tejas/.config: Is a directory
grep: /home/tejas/.dbus: Permission denied
grep: /home/tejas/.dropbox: Is a directory
grep: /home/tejas/.dropbox-dist: Is a directory
grep: /home/tejas/.gconf: Is a directory
grep: /home/tejas/.gimp-2.8: Is a directory
grep: /home/tejas/.gnome: Is a directory
grep: /home/tejas/.gnome2: Is a directory
grep: /home/tejas/.gnome2_private: Is a directory
grep: /home/tejas/.gnupg: Is a directory
grep: /home/tejas/.hplip: Is a directory
grep: /home/tejas/.ipython: Is a directory
grep: /home/tejas/.java: Is a directory
grep: /home/tejas/.julia: Is a directory
grep: /home/tejas/.jupyter: Is a directory
grep: /home/tejas/.keras: Is a directory
grep: /home/tejas/.lastpass: Is a directory
grep: /home/tejas/.local: Is a directory
grep: /home/tejas/.macromedia: Is a directory
grep: /home/tejas/.matlab: Is a directory
grep: /home/tejas/.mozilla: Is a directory
grep: /home/tejas/.npm: Is a directory
grep: /home/tejas/.nv: Is a directory
grep: /home/tejas/.nx: Is a directory
grep: /home/tejas/.oracle_jre_usage: Is a directory
grep: /home/tejas/.pki: Is a directory
grep: /home/tejas/.pypar2: Is a directory
grep: /home/tejas/.pyxbld: Is a directory
grep: /home/tejas/.qt: Is a directory
grep: /home/tejas/.ssh: Is a directory
grep: /home/tejas/.subversion: Is a directory
grep: /home/tejas/.thumbnails: Is a directory
grep: /home/tejas/.thunderbird: Is a directory
grep: /home/tejas/.vim: Is a directory
grep: /home/tejas/.vscode: Is a directory
grep: /home/tejas/.xchat2: Is a directory
grep: /home/tejas/.zoom: Is a directory

【问题讨论】:

  • 您的.bashrc 中没有任何内容,但它会拉入.bash_aliases;你有conda 的别名吗?
  • @tripleee bash: /home/tejas/.bash_aliases: 没有这样的文件或目录
  • @tripleee:别名可以在任何地方定义,在由.bashrc.bashrc.bash_profile 直接或间接获取的文件中,或手动输入。 type -a conda 会直接告诉你 bash 认为 conda 命令是如何定义的。
  • 我建议通过反复试验修复您的 bash 配置。您能做的最好的事情是(1) 将您的 .bashrc 和 .bash_profile 文件复制到一个安全的地方 (2) 清空原始文件 ( 3) 重新启动 bash 作为登录 shell (bash -l) 这将读取空配置文件 (4) 检查问题是否仍然存在 (5) 如果所以,bash 不是问题 (6) 如果问题消失了,慢慢输入复制的配置文件的行并重新启动该过程,直到找到创建的行问题。 (7) 修复它。

标签: python linux bash anaconda conda


【解决方案1】:

调用/home/tejas/anaconda3/bin/conda 的别名或shell 函数是一种可能的解释。试试这个:

type -a conda

它会告诉你 shell 如何解析conda 命令。

如果出现空,问题可能在于 bash 散列命令路径的方式,因此它不必在每次键入命令时搜索您的 $PATH。如果删除命令,Bash 内部哈希表可能会与现实不同步。

试试这个:

hash conda

这将在$PATH 中搜索conda 命令,如果找不到,它将删除哈希条目。之后,输入 conda 应该会给您通常的 conda: command not found 错误。

注意:type -a conda 可能会导致 bash 重新检查 conda 命令的位置,如果找不到,则将其从其内部哈希表中删除。所以这可以诊断和解决问题。

更新:问题已更新,显示有一个名为conda 的shell 函数。 anaconda 安装必须创建了一些定义该功能的东西,并且它仍然存在于您正在运行的 shell 进程中。您可能还设置了一些相关的环境变量,例如$CONDA_EXE

删除定义函数和环境变量的脚本不会将它们从正在运行的 shell 进程中删除。

如果您启动一个新的 shell,它可能不会有这些定义(尽管如果您从当前的 shell 调用它,它将继承任何环境变量)。

如果你想在你运行的shell进程中删除函数定义,你可以unset conda

【讨论】:

  • @ Keith Thompson 请查看编辑 2. Hash conda 刚刚将我返回到提示符。输入 'conda' 仍然会导致 'bash: /home/tejas/anaconda3/bin/conda: No such file or directory '
【解决方案2】:

显然,您仍然定义的函数是导致此特定错误消息的原因,但从您的问题中不清楚它是在哪里定义的或如何删除它。

也许在你的主目录中为CONDA_EXE grep:

grep -F 'CONDA_EXE' ~/.[!.]*

如果这没有显示任何内容,也许类似地在系统文件中查找它,可能在/etc 中。最后,揭示您是如何安装 Conda 以及从何处安装的,或许还可以更详细地说明您卸载它的具体操作。

【讨论】:

  • 我想我已经在问题详细信息部分解释了我是如何卸载 Anaconda 的。我通过从anaconda.com/distribution 下载安装程序来安装 anaconda
猜你喜欢
  • 2018-12-13
  • 1970-01-01
  • 2013-04-11
  • 2015-05-19
  • 2018-10-08
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
相关资源
最近更新 更多