Lorsque je me connecte, j'ai ces messages:
-bash: $'\r' : command not found
-bash: $'\r' : command not found
-bash: $'\r' : command not found
Il est assez clair que cela est causé par des fins de ligne de style Windows dans certains scripts de démarrage, donc ma question est: puis-je suivre le script qui cause cela et comment?
Réponses:
Bash lit un certain nombre de fichiers différents au démarrage, même en fonction de la façon dont il a démarré ( voir le manuel pour la description ). Ensuite, il y a des choses comme ça
/etc/profile.d/
qui ne sont pas directement lues par le shell, mais qui peuvent être référencées à partir des autres fichiers de démarrage dans de nombreuses distributions.Vous devrez passer par tous ces éléments, mais heureusement, vous pouvez juste
grep
pour le retour en calèche. Essayez par exemple quelque chose comme:Voir aussi Est-il possible de savoir quels fichiers définissent / ajoutent aux variables d'environnement et leur ordre de priorité? pour un problème similaire.
la source
~/.bash_aliases
strace -e open your-shell
, d'après la réponseLe fichier (1) peut également être utile ici.
Je peux voir que
signup
ces fins de ligne Windows CRLF doivent être supprimées.Pour un récursif directement comme
/home/username
vous pourriez probablement le combiner avecfind
etxargs
(et peut-être aussi un grep):la source
Une autre méthode consiste à prendre tous les scripts de démarrage mentionnés et à faire écho à une chaîne identifiant chacun au début de chacun.
Ensuite, lors de la connexion, vous verrez quelque chose comme ceci:
À ce stade, vous pouvez conclure que, (dans l'exemple ci-dessus)
.bash_aliases
contient les fins de ligne incriminées.Une fois que vous avez identifié le fichier, mais que les lignes problématiques ne vous sautent pas aux yeux, vous pouvez utiliser la même méthode pour retrouver la ligne. Faites écho à un message à mi-chemin dans le fichier, puis aux 3 / 4ème ou 1 / 4s, selon la sortie. De cette façon, vous pouvez suivre la ligne, selon qu'elle résonne avant ou après votre écho.
la source
Je considère que la partie difficile de cette question n'est pas "comment puis-je trouver les retours chariot dans un fichier?" mais "comment savoir quels fichiers mon bashrc utilise?"
Pour la deuxième question, vous pouvez essayer quelque chose comme ceci:
Cela vous montrera tout ce que fait votre bashrc, y compris tous les fichiers auxquels il se réfère. C'est bruyant, mais cela devrait vous aider à identifier les fichiers utilisés.
Sauf qu'en fait, mes
.bashrc
fichiers (et bien d'autres) se terminent tôt s'ils ne sont pas exécutés de manière interactive, vous devez donc le piéger pour réussir cette vérification:Voici le
-i
mode interactif des forces.Pour repérer uniquement les cas où vous sourcez un fichier, quelque chose comme ça fonctionne pour moi mais je ne peux pas promettre que l'expression régulière capture tout:
Je suppose que vous pourriez également vouloir les messages d'erreur, donc quelque chose comme:
Si pour une raison quelconque, cela ne fonctionnait pas, je recourrais à
strace -e open bash
quelque chose comme ça, pour trouver chaque fois qu'un fichier est ouvert par votre session bash. Mais c'est une solution encore plus lourde / bruyante.la source