Passo 1: Sintoma
O sintoma inicial foi a mensagem de erro:
bash: warning: here-document at line 119 delimited by end-of-file (wanted 'EOF')
Isso nos diz que o problema está na linha 119, mas infelizmente não nos diz qual arquivo estava sendo executado quando o problema ocorreu. Dependendo da configuração do sistema, um bash interativo pode executar qualquer um de um grande número de arquivos de inicialização.
Etapa 2: diagnóstico
Para descobrir quais linhas de quais arquivos de inicialização do bash estão causando um problema, pode-se executar:
PS4='+ $BASH_SOURCE:$LINENO:' bash -xlic ""
Isso inicia um shell de login bash interativo ( -i
) ( -l
) no modo de diagnóstico ( -x
) e executa um comando vazio ( -c ""
). O prompt bash PS4
está configurado para prefixar cada linha de saída com o arquivo e a linha que a causou.
Etapa 3: identificando o problema
Executando o comando de diagnóstico acima, encontramos:
+++ /usr/share/bash-completion/bash_completion:1993:unset BASH_COMPLETION_ORIGINAL_V_VALUE
bash: warning: here-document at line 119 delimited by end-of-file (wanted 'EOF')
++ /home/peaks/.bashrc:119:cat
+ /home/peaks/.profile:20:PATH=/home/peaks/bin:/home/peaks/.local/bin:/home/peaks/bin:/home/peaks/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Isso indica que o problema do documento aqui vem da linha 119 do arquivo /home/peaks/.bashrc
A seção relevante de .bashrc
é:
cat >> ~/.bashrc <<EOF
export PATH="$HOME/.cabal/bin:/opt/cabal/1.22/bin:/opt/ghc/7.10.3/bin:$PATH"
export PATH="/home/peaks/.cabal/bin:/opt/cabal/1.22/bin:/opt/ghc/7.10.3/bin:/home/peaks/bin:/home/peaks/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
Linha 119 cat >> ~/.bashrc <<EOF
é um problema. Ele tenta modificar o arquivo .bashrc
enquanto o arquivo está sendo executado. Nesse caso, ele teve o efeito de anexar novas definições de PATH ao final de .bashrc
. Aparentemente, o arquivo acabou com um número grande o suficiente de tais declarações PATH para atrasar significativamente a inicialização do bash.
Etapa 4: remédio
O problema pode ser corrigido abrindo um editor e excluindo as linhas indesejadas. O Linux oferece uma escolha de editores. É garantido que o editor vi
esteja presente nos sistemas POSIX, mas possui uma curva de aprendizado acentuada. nano
está amplamente disponível e é bom para os recém-chegados porque é fácil de usar. Então, para resolver o problema, poderíamos executar:
nano ~/.bashrc
Em seguida, vá para as linhas problemáticas, exclua-as e salve o arquivo.
Como alternativa, podemos evitar ter que aprender um novo editor executando o seguinte comando:
sed -i.bak '119d; 130,$d' ~/.bashrc
Este comando atualiza ~/.bashrc
no lugar, excluindo a linha 119 e excluindo da linha 130 o final do arquivo. Por segurança, uma cópia de backup do original ~/bashrc
é salva como ~/.bashrc.bak
.