.bashrc 报告意外的 EOF

.bashrc 报告意外的 EOF

我正在尝试向我的 bashrc 添加一些功能,即:

h () { history | fgrep $1 | sort -u | cut -b 8- }

extract () {
  if [ -f $1 ] ; then
      case $1 in
          *.tar.bz2)   tar xvjf $1    ;;
          *.tar.gz)    tar xvzf $1    ;;
          *.bz2)       bunzip2 $1     ;;
          *.rar)       rar e $1       ;;
          *.gz)        gunzip $1      ;;
          *.tar)       tar xvf $1     ;;
          *.tbz2)      tar xvjf $1    ;;
          *.tgz)       tar xvzf $1    ;;
          *.zip)       unzip $1       ;;
          *.Z)         uncompress $1  ;;
          *.7z)        7z x $1        ;;
          *)           echo "I don't know how to extract '$1'." ;;
      esac
  else
      echo "'$1' is not a valid file!"
  fi
}

使用以下命令:

echo -e "\
h () { history | fgrep \044\061 | sort -u | cut -b 8- }  

extract () {
  if [ -f \044\061 ] ; then
      case \044\061 in
          *.tar.bz2)   tar xvjf \044\061    ;;
          *.tar.gz)    tar xvzf \044\061    ;;
          *.bz2)       bunzip2 \044\061     ;;
          *.rar)       rar e \044\061       ;;
          *.gz)        gunzip \044\061      ;;
          *.tar)       tar xvf \044\061     ;;
          *.tbz2)      tar xvjf \044\061    ;;
          *.tgz)       tar xvzf \044\061    ;;
          *.zip)       unzip \044\061       ;;
          *.Z)         uncompress \044\061  ;;
          *.7z)        7z x \044\061        ;;
          *)           echo \042I don't know how to extract '\044\061'.\042 ;;
      esac
  else
      echo \042'\044\061' is not a valid file\041\042
  fi
}" >> ~/.bashrc

...但这会导致bash: /home/chris/.bashrc: line 123: syntax error: unexpected end of filebash 启动时出现此错误。如果我删除这些函数,此错误就会消失。我是否必须在函数部分添加一些结束语句?

答案1

第一行就是问题所在。

h () { history | fgrep $1 | sort -u | cut -b 8- }

将其更改为:

h () { history | fgrep $1 | sort -u | cut -b 8- ; }

或者:

h () {
    history | fgrep $1 | sort -u | cut -b 8-
}

此外,将其放入您的一个更简单/更干净的方法.bashrc是使用重定向(尽管您仍然需要退出$)。

cat >> .bashrc << EOF
h () { history | fgrep \$1 | sort -u | cut -b 8- ; }

extract () {
  if [ -f \$1 ] ; then
      case \$1 in
          *.tar.bz2)   tar xvjf \$1    ;;
          *.tar.gz)    tar xvzf \$1    ;;
          *.bz2)       bunzip2 \$1     ;;
          *.rar)       rar e \$1       ;;
          *.gz)        gunzip \$1      ;;
          *.tar)       tar xvf \$1     ;;
          *.tbz2)      tar xvjf \$1    ;;
          *.tgz)       tar xvzf \$1    ;;
          *.zip)       unzip \$1       ;;
          *.Z)         uncompress \$1  ;;
          *.7z)        7z x \$1        ;;
          *)           echo "I don't know how to extract '\$1'." ;;
      esac
  else
      echo "'\$1' is not a valid file!"
  fi
}
EOF

答案2

将您的shebang更改为

/bin/bash -x #!/bin/bash -x

然后再次运行程序,得到逐行跟踪。通常意外的文件结尾是未闭合的引号或括号。

相关内容