gibberish comando não encontrado na inicialização do terminal bash

1

Eu me deparo com um problema que simplesmente não consigo descobrir. Quando eu inicio meu terminal no Ubuntu (14.04) eu recebo a mensagem

sdfsdfsdi: command not found

Como você pode ver, parece que alguém (talvez eu) estava batendo o teclado em frustração e, depois, acidentalmente escreveu em algum script que o bash lê na inicialização. O problema é que eu não posso para a vida de mim encontrar o script que a bash está lendo quando encontra esse tipo de bobagem. Eu olhei em

~/.profile
~/.bashrc
~/.bash_profile
/etc/profile
/etc/bash.bashrc

e nenhum deles parece ter a frase rabiscada. Existem outros locais que o bash lê na inicialização que eu posso verificar?

Obrigado!

Andrew

(note que esta não é uma questão crítica, mais apenas um pequeno aborrecimento).

    
por Andrew 16.10.2014 / 21:22

2 respostas

1

Para descobrir quais comandos bash são executados na inicialização e de quais arquivos vieram esses comandos, execute:

PS4='+$BASH_SOURCE> ' BASH_XTRACEFD=7 bash -xl 7>&2

A saída é demorada, mas a fonte do jargão provavelmente ficará clara.

Explicação:

  • PS4='+$BASH_SOURCE> '

    Ao criar um rastreamento de execução, bash será prefixado em todas as linhas com uma expansão de PS4 . Aqui, fazemos com que PS4 exiba o arquivo de origem que está sendo lido.

  • BASH_XTRACEFD=7

    Isso envia o rastreio de execução para 7 , que é um descritor de arquivo escolhido na esperança de que os arquivos iniciados bash não sejam mexidos.

  • bash -xl

    Isso inicia o bash com as opções -x , o que faz com que todos os comandos sejam exibidos com o prompt PS4 e -l , que instrui bash a tratar isso como um shell de login. Se você não ficar incomodado em shells de login, tente sem -l .

  • 7>&2

    Isso redireciona a saída de rastreio de volta para stderr para exibição no terminal.

Três refinamentos

Com base no comentário de Geirha, esta versão adiciona três melhorias:

PS4='+ $BASH_SOURCE:$LINENO:' BASH_XTRACEFD=7 bash -xlic ""  7>&2

Existem três refinamentos aqui: (1) o prompt do PS4 agora também exibe o número da linha, bem como o nome do arquivo, (2) o -i faz o shell interativo, além de -l que o tornou um shell de login e (3) -c "" faz com que o shell saia após a conclusão da inicialização.

    
por John1024 16.10.2014 / 21:57
0

Ele é invasivo, mas você pode usar a técnica de depuração mais antiga do livro: imprimir coisas para marcar onde as coisas estão dando errado:

sudo tee -a /etc/profile <<<'echo /etc/profile'
sudo tee -a /etc/bash.bashrc <<<'echo /etc/bash.bashrc'
tee -a ~/.profile <<<'echo ~/.profile'
tee -a ~/.bashrc <<<'echo ~/.bashrc'
tee -a ~/.bash_aliases <<<'echo ~/.bash_aliases'
bash -l

Isso diminuirá a região onde o lixo está e você poderá concentrar sua pesquisa.

    
por muru 17.10.2014 / 00:28