4

I accidentally deleted my ~/.bashrc on my Ubuntu machine and now whenever I enter a command on terminal, it is giving me this error:

The command could not be located because '/usr/bin:/bin' is not included in the PATH environment variable.

I tried adding export PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin to ~/.bashrc, but I'm still facing the same issue.

I can export PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin on the terminal and it works fine, but I have to do it manually every time I open a new terminal. Is there a solution for this?

~/.bashrc contents :

case $- in
    *i*) ;;
      *) return;;
esac
HISTCONTROL=ignoreboth
shopt -s histappend
HISTSIZE=1000
HISTFILESIZE=2000
shopt -s checkwinsize
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac
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
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac
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
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
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$//'\'')"'
if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi
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=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin
export POCL_DEBUG=0
export POCL_DEVICES=rsim
export POCL_CACHE_DIR=$HOME/temp_pocl
export REDEFINE_HOME=$HOME/redefine/
export POCL_LEAVE_KERNEL_COMPILER_TEMP_FILES=1
export PATH=$PATH:/home/harry/redefine/bin/riscv32-gcc/bin
export LLVM_PATH=$HOME/llvm-project/build/bin
export PATH=$HOME:$LLVM_PATH
harry
  • 143
  • 1
    I'm not sure if I understood correctly, but if the problem is that you don't know the contents of the deleted ~/.bashrc file you can find a backup of it on /etc/skel/.bashrc... So cp /etc/skel/.bashrc ~/.bashrc would be enough for solving this problem – Rafael Muynarsk Sep 19 '20 at 05:50
  • Thanks mate, this resolves the issue partially. I was able to enter commands now, but if i add paths to $PATH env variable, i am facing the issue again. – harry Sep 19 '20 at 06:15
  • I cannot add whole file as it is too big, i'm facing issue when i add these exports.

    export PATH=$PATH:/home/harry/redefine/bin/riscv32-gcc/bin export LLVM_PATH=$HOME/llvm-project/build/bin export PATH=$HOME:$LLVM_PATH

    – harry Sep 19 '20 at 08:44
  • 1
    Double-quote all variable assignments in full. Always, not just here. – Paul_Pedant Sep 19 '20 at 09:14
  • Please show us the entire file. We need to see it to understand the problem. To make it smaller, you can post the output of grep -P '^\s*[^#]+' ~/.bashrc. Then, you can use the formatting tools to format it as code so you don't hit the max question length limit. – terdon Sep 19 '20 at 09:35
  • Also, PATH should be defined in ~/.profile or ~/.bash_profile and not ~/.bashrc. – terdon Sep 19 '20 at 09:36
  • @terdon thanks for the suggestion, I've updated the question. please check. – harry Sep 19 '20 at 09:48
  • Adding PATH to ~/.bash_profile and ~/.profile didn't resolve the issue. Earlier i used to add PATH to ~/.bashrc and it worked fine. – harry Sep 19 '20 at 09:58

1 Answers1

4

First of all, you should remove your PATH declarations from ~/.bashrc. You don't want these to be re-run each time you open a new shell! This sort of global variable definition belongs in ~/.profile or, if the file exists, ~/.bash_profile.

Now, the problem you are facing is caused by the multiple PATH declarations you have which are overwriting each other. These are the relevant lines:

export PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin
export PATH="$PATH":/home/harry/redefine/bin/riscv32-gcc/bin
export LLVM_PATH="$HOME"/llvm-project/build/bin
export PATH="$HOME:$LLVM_PATH"

Those are 4 commands, each of which will be run sequentially. Let's see what happens if we run them in a terminal:

$ export PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin
$ echo "$PATH"
/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin
$ export PATH="$PATH":/home/harry/redefine/bin/riscv32-gcc/bin
$ echo "$PATH"
/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/home/harry/redefine/bin/riscv32-gcc/bin
$ export LLVM_PATH="$HOME"/llvm-project/build/bin
$ export PATH="$HOME:$LLVM_PATH"
$ echo "$PATH"
/home/terdon:/home/terdon/llvm-project/build/bin

As you can see above, your final export command overwrites the previous changes you had made and sets PATH to only contain your $HOME dir (which doesn't make sense, you don't want your $HOME in your PATH!) and your $LLVM_PATH. What you wanted to do was add the $LLVM_PATH to $PATH, so you should instead have this:

export PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/home/harry/redefine/bin/riscv32-gcc/bin
export LLVM_PATH="$HOME"/llvm-project/build/bin
export PATH="$PATH:$LLVM_PATH"

So, delete all PATH definitions from your ~/.bashrc and add the three lines above to your ~/.profile instead.

terdon
  • 242,166
  • 1
    Thank you so much for the clarificatoin, I had to do source ~/.profile after adding PATH. Finally it's working :) – harry Sep 19 '20 at 10:08
  • @harry yes, ~/.profile is read once, when you log in, so you had to source it manually this time. But next time you log out and log back in again, everything should work as expected. – terdon Sep 19 '20 at 10:11