.bashrc reporta EOF inesperado

0

Estou tentando adicionar algumas funções ao meu bashrc, a saber:

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
}

usando o seguinte comando:

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

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

... mas isso resulta em bash: /home/chris/.bashrc: line 123: syntax error: unexpected end of file quando o bash é iniciado. Se eu remover essas funções, esse erro desaparece. Existe alguma declaração de fechamento que devo adicionar à seção de funções?

    
por Matthieu Cartier 25.01.2011 / 17:56

2 respostas

2

A primeira linha é o problema.

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

Altere para isto:

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

Ou:

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

Além disso, uma maneira mais fácil e mais simples de colocá-lo no seu .bashrc é com o redirecionamento (embora você ainda precise escapar do $ ).

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

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

Mude seu shebang para

#!/bin/bash -x

e execute o programa novamente, para obter um rastreamento de linha por linha. Geralmente, o final inesperado do arquivo é uma citação ou colchete não fechado.

    
por 25.01.2011 / 18:05

Tags