Wenn ich mich anmelde, habe ich folgende Meldungen:
-bash: $'\r' : command not found
-bash: $'\r' : command not found
-bash: $'\r' : command not found
Es ist ziemlich klar, dass dies durch Zeilenenden im Windows-Stil in einigen Startskripten verursacht wird. Meine Frage lautet also: Kann ich ein Skript verfolgen, das dies verursacht, und wie?
Antworten:
Bash liest beim Start eine Reihe verschiedener Dateien, auch je nachdem, wie sie gestartet wurden (eine Beschreibung finden Sie im Handbuch ). Dann gibt es
/etc/profile.d/
solche Dinge , die nicht direkt von der Shell gelesen werden, sondern in vielen Distributionen aus den anderen Startdateien referenziert werden können.Sie müssen all das durchgehen, aber zum Glück können Sie nur
grep
für den Wagenrücklauf. Versuchen Sie zB etwas wie:Siehe auch Ist es möglich herauszufinden, welche Dateien Umgebungsvariablen setzen / hinzufügen und in welcher Reihenfolge sie Vorrang haben? für ein ähnliches Problem.
quelle
~/.bash_aliases
strace -e open your-shell
, aus Stéphanes Antwort hier zu verwendenDatei (1) kann auch hier hilfreich sein.
Ich kann sehen, dass
signup
diese lästigen Windows CRLF-Zeilenenden entfernt werden müssen.Für eine rekursive direkt wie
/home/username
Sie wahrscheinlich mitfind
undxargs
(und vielleicht auch mit einem grep) kombinieren könnten :quelle
Eine andere Methode besteht darin, alle genannten Startskripte zu verwenden und eine Zeichenfolge zu wiederholen, die jedes am Anfang jedes Skripts identifiziert.
Beim Anmelden sehen Sie dann Folgendes:
An diesem Punkt können Sie schließen, dass (im obigen Beispiel)
.bash_aliases
die fehlerhaften Zeilenenden enthält.Sobald Sie die Datei identifiziert haben, aber die Problemzeilen nicht herausspringen, können Sie dieselbe Methode verwenden, um die Zeile aufzuspüren. Echo eine Nachricht zur Hälfte der Datei, dann 3/4 oder 1/4 durch, je nach Ausgabe. Auf diese Weise können Sie die Linie aufspüren, je nachdem, ob sie vor oder nach Ihrem Echo wiedergegeben wird.
quelle
Ich nehme den schwierigen Teil dieser Frage als nicht "Wo finde ich Wagenrückläufe in einer Datei?" aber "wie kann ich herausfinden, welche Dateien mein bashrc verwendet?"
Bei der zweiten Frage können Sie Folgendes ausprobieren:
Dies zeigt Ihnen alles , was Ihr bashrc tut, einschließlich aller Dateien, auf die es verweist. Es ist laut, soll Ihnen aber dabei helfen, herauszufinden, welche Dateien verwendet werden.
Außer in der Tat werden meine (und viele andere)
.bashrc
Dateien vorzeitig beendet, wenn sie nicht interaktiv ausgeführt werden. Sie müssen sie also dazu verleiten, diese Prüfung zu bestehen:Hier
-i
erzwingt der interaktive Modus.Um nur die Fälle herauszufinden, in denen Sie eine Datei als Quelle verwenden, funktioniert so etwas für mich, aber ich kann nicht versprechen, dass der Regex alles abfängt:
Ich denke, Sie möchten vielleicht auch die Fehlermeldungen, also so etwas wie:
Wenn aus irgendeinem Grund nichts davon funktioniert, würde ich auf
strace -e open bash
oder so etwas zurückgreifen , um jedes Mal zu finden, wenn eine Datei von Ihrer Bash-Sitzung geöffnet wird. Aber das ist eine noch schwerere / lautere Lösung.quelle