2

When I try to update (source .bashrc) my .bashrc in the Ubuntu terminal for changes in aliases, I get the error

bash: ./.bashrc: line 34: syntax error near unexpected token `then'
bash: ./.bashrc: line 34: `if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then'

which is about this piece of code in the .bashrc:

# 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

Adding set -x at the top of .bashrc, I get the following extra information on output:

+ source .bashrc
++ case $- in
++ HISTCONTROL=ignoreboth
++ shopt -s histappend
++ HISTSIZE=1000
++ HISTFILESIZE=2000
++ shopt -s checkwinsize
++ '[' -x /usr/bin/lesspipe ']'
+++ SHELL=/bin/sh
+++ lesspipe
++ eval 'export LESSOPEN="| /usr/bin/lesspipe %s";
export LESSCLOSE="/usr/bin/lesspipe %s %s";'
+++ export 'LESSOPEN=| /usr/bin/lesspipe %s'
+++ LESSOPEN='| /usr/bin/lesspipe %s'
+++ export 'LESSCLOSE=/usr/bin/lesspipe %s %s'
+++ LESSCLOSE='/usr/bin/lesspipe %s %s'

I have restored my .bashrc via /etc/skel to default but the error still appears as this part of the code seems to be default. Below is my complete .bashrc file.

# ~/.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 HOME_T_exp=/home/boris/Tetra
export HTB=$HOME_T_exp/bin
export P_plot=$HOME_T_exp/P_plot
export PATH=$PATH:.:$HOME_T_exp/bin:$P_plot/uscr

alias vb='vi .bashrc'
alias sb='source .bashrc'

alias ci='vi'

alias hom='cd /home/boris'
alias pic='cd ~/Pictures'
alias tet='cd ~/Tetra'
alias dat='cd ~/Tetra/Data'
alias mrg='cd ~/Tetra/Data/Merge_data'

alias rd='cd ~/Tetra/Run_Mediterranean'
alias rf='cd ~/Tetra/Run_Mediterranean/Run_faults'
alias rnf='cd ~/Tetra/Run_Mediterranean/Run_nofaults'
alias rf1='cd ~/Tetra/Run_Mediterranean/Run_onepar_faults'
alias rnf1='cd ~/Tetra/Run_Mediterranean/Run_onepar_nofaults'

alias if='cd ~/Tetra/Run_Mediterranean/Run_faults/I_0'
alias inf='cd ~/Tetra/Run_Mediterranean/Run_nofaults/I_0'
alias if1='cd ~/Tetra/Run_Mediterranean/Run_onepar_faults/I_0'
alias inf1='cd ~/Tetra/Run_Mediterranean/Run_onepar_nofaults/I_0'

alias sf='cd ~/Tetra/Run_Mediterranean/Run_faults/SYNTH'
alias snf='cd ~/Tetra/Run_Mediterranean/Run_nofaults/SYNTH'
alias sf1='cd ~/Tetra/Run_Mediterranean/Run_onepar_faults/SYNTH'
alias snf1='cd ~/Tetra/Run_Mediterranean/Run_onepar_nofaults/SYNTH'

alias src='cd ~/Tetra/Src'
alias bin='cd ~/Tetra/bin'
alias ppl='cd ~/Tetra/P_plot'

alias tsh='cd /media/boris/toshiba'
alias sdm='sudo mount /dev/sda1/media/boris/toshiba'
alias gf='gfortran'

export T=~/Tetra
export P=$T/P_plot

export IMagick=/home/boris
export MAGICK_HOME=$IMagick/ImageMagick-7.0.8-23
export DYLD_LIBRARY_PATH=$MAGICK_HOME/lib

export PATH=$MAGICK_HOME/utilities:$PATH

export LS_COLORS="$LS_COLORS:ow=1;34:tw=1;34:"

Does anyone know a solution to this issue?

6
  • Interesting... I copied your .bashrc to a local file, and if I source it once it's fine - but if I source it again I get the error you observe. Sourcing the default bashrc multiple times does not seem to be a problem. Sourcing the default one after sourcing yours produces the error. Apr 8, 2020 at 15:57
  • Thanks for your suggestion Jos! I added the set -x output to the question. And I noticed something similar as well steeldriver.. Apr 8, 2020 at 16:09
  • 3
    Hmm... I suspect your issue is line 141 alias if='cd ~/Tetra/Run_Mediterranean/Run_faults/I_0' ... probably not a good idea to alias over the if keyword Apr 8, 2020 at 16:24
  • True, but I still get the error at line 34 after changing the "if"-alias and/or restoring the default .bashrc Apr 8, 2020 at 16:35
  • 1
    You will need to unalias if or start a fresh interactive shell Apr 8, 2020 at 16:37

1 Answer 1

1

steeldriver is right

the problem is your alias if. you can comment the line 141 and add this at the begining of your bashrc

alias if='if'

for the next source .bashrc.

after this you can delete the alias if and change the line 141 with something like

alias if-foo='cd ~/Tetra/Run_Mediterranean/Run_faults/I_0'

regards

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.