Erro de sintaxe próximo ao token inesperado '{'

1

Toda vez que eu executo um novo terminal virtual, ele começa com

bash: /usr/share/bash-completion/bash_completion: line 226: syntax error near unexpected token '}'
bash: /usr/share/bash-completion/bash_completion: line 226: '}'
kimifish@kimipc:~$ 

Mas o arquivo bash_completion parece estar certo (com certeza não é). Desculpe por essas barras verticais, é apenas o destaque da guia vim :

     ...
     186 # Assign variables one scope above the caller
     187 # Usage: local varname [varname ...] &&
     188 #        _upvars [-v varname value] | [-aN varname [value ...]] ...
     189 # Available OPTIONS:
     190 #     -aN  Assign next N values to varname as array
     191 #     -v   Assign single value to varname
     192 # Return: 1 if error occurs
     193 # See: http://fvue.nl/wiki/Bash:_Passing_variables_by_reference
     194 _upvars()
     195 {
     196     if ! (( $# )); then
     197     |   echo "${FUNCNAME[0]}: usage: ${FUNCNAME[0]} [-v varname"\
     198     |   |   "value] | [-aN varname [value ...]] ..." 1>&2
     199     |   return 2
     200     fi
     201     while (( $# )); do
     202     |   case $1 in
     203             -a*)
     204     |   |   |   # Error checking
     205     |   |   |   [[ ${1#-a} ]] || { echo "bash: ${FUNCNAME[0]}: \'$1': missing"\
     206     |   |   |   |   "number specifier" 1>&2; return 1; }
     207     |   |   |   printf %d "${1#-a}" &> /dev/null || { echo "bash:"\
     208     |   |   |   |   "${FUNCNAME[0]}: \'$1': invalid number specifier" 1>&2
     209     |   |   |   |   return 1; }
     210     |   |   |   # Assign array of -aN elements 
     211     |   |   |   [[ "$2" ]] && unset -v "$2" && eval $2=\(\"\${@:3:${1#-a}}\"\) &&
     212     |   |   |   shift $((${1#-a} + 2)) || { echo "bash: ${FUNCNAME[0]}:"\
     213     |   |   |   |   "\'$1${2+ }$2': missing argument(s)" 1>&2; return 1; }
     214     |   |   |   ;;
     215             -v) 
     216     |   |   |   # Assign single value
     217     |   |   |   [[ "$2" ]] && unset -v "$2" && eval $2=\"\\" &&
     218     |   |   |   shift 3 || { echo "bash: ${FUNCNAME[0]}: $1: missing"\
     219     |   |   |   "argument(s)" 1>&2; return 1; }
     220     |   |   |   ;;
     221             *)  
     222     |   |   |   echo "bash: ${FUNCNAME[0]}: $1: invalid option" 1>&2
     223     |   |   |   return 1 ;;
     224         esac
     225     done
     226 }
     ...

e não tenho absolutamente nenhuma ideia de onde procurar um erro…

Parte do meu ~/.bashrc sobre a conclusão do bash:

  91 if ! shopt -oq posix ; then
  92   if [ -f /usr/share/bash-completion/bash_completion ]; then
  93     . /usr/share/bash-completion/bash_completion
  94   elif [ -f /etc/bash_completion ]; then
  95     . /etc/bash_completion
  96   fi
  97 fi

A exclusão de código por partes revelou um pouco: o corte do loop " while " elimina o erro, mas corta apenas a construção " case ", não. = /

    
por Влад Шерышев 04.09.2017 / 15:48

1 resposta

2

Uma possível explicação é que você faz

alias done='something'

antes de pesquisar /usr/share/bash-completion/bash_completion .

Isso explicaria essa mensagem de erro, pois bash reclamaria que a função estava sendo fechada enquanto o loop while não (devido à falta do done que foi substituído por something ).

Não use done ou qualquer palavra-chave do shell como um nome de alias (embora você possa definir alguns aliases de instrumentação como alias do='do ((loop_level++));'; alias done='((loop_level--)); done' , desde que eles mantenham a estrutura do shell).

    
por 04.09.2017 / 18:13