Ao fazer login, tenho estas mensagens:
-bash: $'\r' : command not found
-bash: $'\r' : command not found
-bash: $'\r' : command not found
É bastante claro que isso é causado por terminações de linha no estilo do Windows em alguns scripts de inicialização. Portanto, minha pergunta é: Posso rastrear scripts que causam isso e como?
Respostas:
O Bash lê vários arquivos diferentes na inicialização, mesmo dependendo de como foi iniciado ( consulte o manual para obter a descrição ). Depois, há coisas assim
/etc/profile.d/
que não são lidas diretamente pelo shell, mas podem ser referenciadas a partir de outros arquivos de inicialização em muitas distribuições.Você terá que passar por tudo isso, mas, felizmente, é possível apenas
grep
pelo retorno de carro. Tente, por exemplo, algo como:Consulte também É possível descobrir quais arquivos estão configurando / adicionando às variáveis de ambiente e sua ordem de precedência? para um problema semelhante.
fonte
~/.bash_aliases
strace -e open your-shell
, a partir da respostaO arquivo (1) também pode ser útil aqui.
Percebo que é
signup
necessário remover essas terminações de linha CRLF do Windows.Para um recursivo diretamente como
/home/username
você provavelmente poderia combinar comfind
exargs
(e talvez um grep também):fonte
Outro método é pegar todos os scripts de inicialização mencionados e repetir uma string identificando cada um no início de cada um.
Então, no login, você verá algo assim:
Nesse ponto, você pode concluir que (no exemplo acima)
.bash_aliases
contém as terminações da linha incorreta.Depois de identificar o arquivo, mas as linhas do problema não surgem, você pode usar o mesmo método para rastrear a linha. Faça eco de uma mensagem na metade do arquivo e depois em 3/4 ou 1/4, dependendo da saída. Dessa forma, você pode rastrear a linha, dependendo de ela ecoar antes ou depois do seu eco.
fonte
Considero que a parte mais difícil desta pergunta não é "como posso encontrar retornos de carro em um arquivo?" mas "como posso descobrir quais arquivos meu bashrc usa?"
Para a segunda pergunta, você pode tentar algo como isto:
Isso mostrará tudo o que o seu bashrc faz, incluindo todos os arquivos a que se refere. É barulhento, mas deve ajudá-lo a rastrear quais arquivos estão sendo usados.
Exceto, de fato, meus
.bashrc
arquivos (e muitos outros) saem mais cedo, se não forem executados de maneira interativa; portanto, você deve enganá-lo para passar nessa verificação:Aqui o
-i
modo interativo de forças.Para destacar apenas os casos em que você cria um arquivo, algo assim funciona para mim, mas não posso prometer que o regex captura tudo:
Eu acho que você também pode querer as mensagens de erro, então algo como:
Se, por algum motivo, nada disso funcionasse, eu recorreria a
strace -e open bash
algo assim, para descobrir sempre que qualquer arquivo for aberto por sua sessão do bash. Mas essa é uma solução ainda mais pesada / barulhenta.fonte