So beheben Sie, dass das Terminal ~ / .bashrc unter OS X Lion nicht lädt [geschlossen]

176

Immer wenn ich mit Cmd+ eine neue Registerkarte in Terminal Töffne, wird bash im selben Verzeichnis wie die vorherige Registerkarte geöffnet. Dies funktioniert gut, wenn ich im ~Verzeichnis bin , aber wenn ich irgendwo anders bin, wird beim Laden ein Fehler angezeigt.bashrc

Last login: Sat Oct 15 21:10:00 on ttys002
-bash: .bashrc: No such file or directory
Jakub-Arnolds-MacBook-Pro:projects darth$ 

Es sieht so aus, als würde .bashrces über einen relativen und nicht über einen absoluten Pfad geladen, denn wenn ich das tue source ~/.bashrc, funktioniert alles reibungslos.

geladener bashrc

Ich denke, dies ist ein Problem im Zusammenhang mit OS X Lion, da ich vor dem Upgrade von Snow Leopard nicht das gleiche Problem hatte. Aber das könnte daran liegen, dass das Terminal immer um öffnet ~. Ich erinnere mich nicht, ob es versucht hat, dasselbe Verzeichnis zu öffnen.

Die Frage bleibt jedoch dieselbe: Wie kann ich das Terminal ~/.bashrcüber einen absoluten Pfad und nicht relativ laden ?

Jakub Arnold
quelle
1
Diese Frage sollte nach apple.SE (wenn möglich?) verschoben und nicht geschlossen werden.
Sparr
@Sparr Ich stimme dir vollkommen zu, aber die Moderatoren verschieben nur neuere Fragen, keine älteren. Siehe Diskussion hier
рüффп

Antworten:

357

Terminal öffnet eine Login-Shell. Dies bedeutet, ~/.bash_profilewird ausgeführt, ~/.bashrcnicht.

Die Lösung auf den meisten Systemen ist es , „require“ die ~/.bashrcin der ~/.bash_profile: gerade diese Schnipsel setzen in Ihrem ~/.bash_profile:

[[ -s ~/.bashrc ]] && source ~/.bashrc
ckruse
quelle
8
Könnte jemand erklären, was der [[ -s /file/path ]]tut? Es ist nicht einfach, bei Google nach einer Erklärung zu suchen.
Shane
18
From man bash: -s file True, wenn die Datei vorhanden ist und eine Größe größer als Null hat.
ckruse
1
"Terminal öffnet eine Login-Shell" - was sind die anderen Arten von OS-Shells? Wo finde ich weitere Unterlagen dazu?
Ritter
4
Es gibt sogenannte "interaktive Shells" und "Login-Shells". Ihr Bash-Handbuch ( man bash) spricht darüber und erklärt es, Kapitel INVOCATION (suchen Sie einfach INVOCATIONnach dem Aufruf man bashdurch Eingabe /INVOCATION)
ckruse
3
Ich kann nicht erkennen, wie eine Frage, die sich auf eine Codeausführungssituation bezieht und durch eine Codezeile gelöst wird, für eine Programmierfragen-Site "nicht zum Thema" gehört.
Kheldar
26

Das Umbenennen .bashrcin .profile(oder das weiche Verknüpfen des letzteren mit dem ersteren) sollte ebenfalls den Trick tun. Siehe hier .

Scorpiodawg
quelle
Oder Sie könnten sie mit cd && ln -s ./.bashrc ./.profileSymlinks verknüpfen: Beachten Sie, dass Symlinks hinsichtlich des Dateipfads empfindlich sind. Ich glaube, dass die Verwendung der obigen Syntax funktioniert, aber um sicherzugehen, dass Sie auf jeden Fall absolute Pfade verwenden können.
Steve Benner
1
Oh nein? Diese Dateien haben unterschiedliche Zwecke. Wenn Sie Bash-Syntax .profilehaben, brechen Sie regelmäßig sh.
Tripleee
14

Ich habe folgendes in meinem ~/.bash_profile:

if [ -f ~/.bashrc ]; then . ~/.bashrc; fi

Wenn ich .bashrcstattdessen hätte ~/.bashrc, würde ich das gleiche Symptom sehen, das Sie sehen.

Keith Thompson
quelle