使用.bashrc的终端错误(某些错误?)会禁用所有别名等

我不能在bash中使用任何别名或自定义变量。 我立即打开终端时的错误:

: command not found bash: /home/khaverim7/.bashrc: line 6: syntax error near unexpected token `$'in\r'' 'ash: /home/khaverim7/.bashrc: line 6: `case $- in 

我上次使用计算机时可能在.bashrc中添加/删除了一个字符,但我不知道在哪里。 我试过复制一个默认的.bashrc文件并得到一个更复杂的错误:

 : command not found : command not found : command not found : invalid shell option name : command not found : command not found : invalid shell option name : command not found : command not found : command not found bash: /home/khaverim7/.bashrc: line 32: syntax error near unexpected token `$'in\r'' 'ash: /home/khaverim7/.bashrc: line 32: `case "$TERM" in 

这是我的.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=15000 # 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) 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 # some more ls aliases alias ll='ls -alF' alias la='ls -A' alias l='ls -CF' # MY CUSTOM ALIASES===================================== alias lah='ls -lah' alias fone="adb -d forward tcp:8080 tcp 8080;telnet -e '' 127.0.01 8080" # MY CUSTOM FUNCTIONS =================================== # opall: opens all files with supplied filetype in current dir (eg opall doc opens all .doc files) function opall { ls -b *.$1 | xargs -n 1 xdg-open } # 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 

看起来你有Windows行结尾( \r\n )而不是Unix行结尾( \n )。 例如,查看第一组错误消息:

 ... token `$'in\r'' 'ash: /home/khaverim7/.bashrc: line 6: `case $- in 

它应该是什么,如果\r (回车,将光标发送回一行中的第一个字符)打印为\r

 ... token `$'in\r'' bash: /home/khaverim7/.bashrc: line 6: `case $- in\r' 

同样的,

 : command not found 

将是唯一的\r空行:

 bash: \r: command not found 

和,

 : invalid shell option name 

将是由于shopt命令结束时的\r ,其中选项名称足够短:

 bash: line 0: shopt: something\r: invalid shell option name 

(与bash -c blahbash -c 'shopt -s blah' 。)

要重新获得Unix行结尾,请使用dos2unix命令进行转换:

 dos2unix .bashrc 

我怀疑您在某些时候使用过基于Windows的客户端(如WinSCP,FileZilla等),或者您的编辑器默认使用Windows行结尾。