Wo finde ich die .bashrc-Datei unter Mac OS X Snow Leopard und Lion?


89

Ich möchte rvm auf meinem Snow Leopard-Computer installieren.

Ich muss meiner .bashrcDatei eine Zeile hinzufügen (ich verwende bash), aber wo ist meine .bashrcDatei?


1
Sie sollten Ihre Lösung in eine Antwort eintragen und akzeptieren (Sie müssen ein oder zwei Tage warten, bevor SU dies zulässt). Auf diese Weise können Personen mit demselben Problem die Frage betrachten und feststellen, dass sie eine Antwort hat.
Nifle

1
Seine Lösung unterscheidet sich nicht von der oben gewählten Antwort.
David Cowden

Nur um sicherzugehen, dass dies kein Problem des Profils "Linux = .bashrc vs. Mac OS =. (Bash_)" ist, funktionieren die Shell-Startdateien unter Linux und Mac gleich, und die Datei .bashrc ist der direktere Ort für die Sitzung spezifische Einstellungen. Wenn Sie beispielsweise tmux oder screen verwenden, haben Sie möglicherweise keine Anmeldesitzungen, möchten aber dennoch Ihre Aliase. Der Grund, warum Mac sich anders fühlt, ist, dass die meisten Linux-Distributionen Systemprofilskripte oder Gerüstprofile liefern, die bereits bashrc delegieren (Quelle).
Eckes

Antworten:


78

In Bezug auf das Problem mit .bashrcoben:

Wird auf den meisten Systemen ~/.bashrcnur beim Starten einer interaktiven Shell ohne Anmeldung verwendet . Wenn Sie jedoch eine neue Shell starten es ist oft eine interaktive Login - Shell . Da dies eine Login- Shell ist, .bashrcwird die ignoriert. Um die Umgebung zwischen nicht angemeldeten und angemeldeten Shells konsistent zu halten, müssen Sie das .bashrcvon Ihrem .profileoder Ihrem beziehen .bash_profile.

Siehe Bash-Referenzhandbuch, Abschnitt 6.2 Bash-Startdateien

Wird als interaktive Anmeldeshell oder mit --login aufgerufen

Wenn Bash als interaktive Anmeldeshell oder als nicht interaktive Shell mit der Option --login aufgerufen wird, werden zuerst Befehle aus der Datei / etc / profile gelesen und ausgeführt, sofern diese Datei vorhanden ist. Nach dem Lesen dieser Datei sucht sie in dieser Reihenfolge nach ~ / .bash_profile, ~ / .bash_login und ~ / .profile und liest und führt Befehle von der ersten Datei aus, die vorhanden und lesbar ist.

Wird als interaktive Shell ohne Anmeldung aufgerufen

Wenn eine interaktive Shell gestartet wird, die keine Anmeldeshell ist, liest Bash Befehle von ~ / .bashrc und führt sie aus, sofern diese Datei vorhanden ist.

Normalerweise enthält Ihr ~ / .bash_profile die Zeile

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

nach (oder vor) Login-spezifischen Initialisierungen.

Auf meinem Mac (Running Leopard) gab es keine Quelle für die Leitung ~/.bashrc. Ich musste diese Funktionalität selbst hinzufügen.

Wird auf einigen Systemen und anderen Betriebssystemen .bashrcvom globalen /etc/profileoder /etc/bash_profileoder mithilfe der Vorlagendateien von bezogen /etc/skel.

Um ehrlich zu sein, die Unterscheidung zwischen .bashrcund .bash_profilewird von der Community nicht gut verstanden. Wenn viele Entwickler "Add this to your .bashrc" sagen, meinen sie "Add this to your .bash_profile". Sie möchten, dass die Funktionalität zu Ihrer Anmeldeshell hinzugefügt wird ( .bash_profileund nicht zu Ihrer Nicht-Anmeldeshell) . In der Realität spielt es normalerweise keine Rolle und das Einrichten der Konfiguration .bashrcist akzeptabel.


Dieser Link gibt einen guten Überblick über die Arten von Shells und wann Startdateien geladen werden - hacktux.com/bash/bashrc/bash_profile
studgeek

Was ist hier mit "bezogen" gemeint?
Elgrego

@elgrego, hier ist eine gute Beschreibung: Wenn eine Datei bezogen wird (indem Sie entweder den Quelldateinamen oder den Dateinamen in die Befehlszeile eingeben), werden die Codezeilen in der Datei so ausgeführt, als ob sie in der Befehlszeile gedruckt würden. Siehe tldp.org/HOWTO/Bash-Prompt-HOWTO/x237.html
Stefan Lasiewski

60

Es stellt sich also heraus, dass unter Mac OS X Snow Leopard und Mac OS X Lion die geladene Datei .profilenicht aufgerufen wird .bashrc.

Sie möchten eine Datei in erstellen ~/.profileund sie als .profile bezeichnen (falls sie noch nicht vorhanden ist).

Geben Sie alle Informationen ein, die Sie zum Laden jeder Bash-Instanz benötigen (Danke, thepurplepixel).

Ein paar Randnotizen:

  1. Der Punkt vor der Datei markiert sie standardmäßig als unsichtbar für Finder und den Befehl ls. Um unsichtbare Dateien mit dem Befehl ls aus dem Terminal aufzulisten, verwenden Sie den -aParameter as als solchen:ls -a
  2. Das ~Symbol steht für den /Users/YourUserNameKurznamen Ihres Benutzernamens.

Edit: Chris Page merkt (korrekt) an, dass alles, was Sie in eine .profile-Datei einfügen, auf die von Ihnen verwendete Shell (zhs, bash usw.) angewendet wird. Wenn der Inhalt nur die Bash-Shell betreffen soll, platzieren Sie den Inhalt in einer .bash_profileDatei anstelle einer .profileDatei.


5
Ihre Frage wurde am 1. Juni 2010 [richtig] beantwortet - einen Tag nachdem Sie sie gestellt haben. Über ein Jahr später kommen Sie zurück und geben genau die gleiche Antwort und akzeptieren Ihre eigene Antwort ...
David Cowden

3
Tatsächlich enthält seine Antwort mehr Details als die Antwort vom 1. Juni 2010. Er geht speziell auf das Problem unter Mac OS X ein, das ich als hilfreich empfunden habe.
Webworm

3
Beachten Sie, dass die Datei nicht gelesen wird , wenn .bash_profilein Ihrem Ausgangsverzeichnis bereits eine vorhanden ist .profile!
Phani

Ich habe eine Neuinstallation von Mac Os El Capitan. Es gibt keine Profildatei . Erstellen Sie einfach eine .profile-Datei und es funktioniert. Ich persönlich habe mein .bashrc in .profile umbenannt.
Nicolas Thery

4

Sie müssen Ihre eigenen machen .bashrc. Sie können einfach einen Texteditor verwenden, um eine Datei .bashrc(ohne Erweiterung) mit dem gewünschten Inhalt zu erstellen und in Ihrem Home-Verzeichnis zu speichern ( /Users/YourUserName/).


1
Eigentlich hat das nicht geklappt, aber Sie haben mich in die richtige Richtung geschickt, indem Sie mir gesagt haben, ich solle meine eigene Datei erstellen. Die Datei, die in einer Snow Leopard-Konfiguration funktioniert hat, war .profile, nicht .bashrc (was aus irgendeinem Grund in diesem Betriebssystem nicht geladen ist). Ich werde detaillierte Anweisungen in der Frage posten. Vielen Dank!
Yuval

@Yuval: Standardmäßig .bashrcfunktioniert a, aber nur, wenn es keine gibt .profile. Ich denke jedoch, dass ~/.profilees standardmäßig existiert. Froh, dass ich helfen konnte! (Und Sie sollten Ihre Lösung in eine Antwort einfügen und für zukünftige Leser dieser Frage akzeptieren.)
Squircle

Ich denke dein Kommentar zu nur wenn es keine .profile gibt ist falsch. .bashrc funktioniert in einer interaktiven Shell ohne Anmeldung oder wenn sie von .profile stammt (.bash_profile ist wahrscheinlich ein besserer Ort, da .profile für die Bourne-Shell ist). .profile wird während einer interaktiven Shell ohne Anmeldung verwendet.
Stefan Lasiewski

@Stefan Das klingt dann richtig. Ich bin kein Experte :)
squircle

2
Niemand ist ;). Dieses Zeug (.bashrc vs. .profile vs. .bash_profile vs. .bash_login vs. interaktive Login-Shell vs. interaktive Nicht-Login-Shell vs. nicht interaktive Shell) ist verwirrend und wird von vielen Unixen und Shell-Skripten gebrochen und überschrieben.
Stefan Lasiewski

3

Ich finde, dass in meinem OS 10.6.5 die Bash-Einstellungen in "/ etc / bashrc" sind. Ich denke, das ist die Toplevel-Spezifikation für Shell.

Sie benötigen jedoch ein Root-Konto, um es zu ändern. Die lokalen Benutzerspezifikationen "~ / .bashrc" sollten mit dem folgenden Snippet beginnen, um die Bash-Einstellungen auf Systemebene zu lesen und zu laden:

if [ -r /etc/bashrc ]; then
    . /etc/bashrc 
fi

Normalerweise füge ich Aliase in den bashrc auf Systemebene ein, damit auch alle Benutzer darauf zugreifen können. Es sei denn, sie möchten Ihre Verknüpfungen und Aliase nicht verwenden.

Viel Glück!


2
/ etc / profile (ausgeführt von Login-Shells) ist ein globales Bash-Startskript, das für alle Benutzer gilt und Standardverhalten für Login-Shells bereitstellt. Daraufhin wird / etc / bashrc ausgeführt, das Anpassungen enthält, die sowohl für Anmelde- als auch für Nicht-Anmelde-Shells gelten. In ähnlicher Weise sollten einzelne Benutzer eine ~ / .bash_profile-Datei erstellen, in der ~ / .bashrc ausgeführt wird, wo sich die meisten Anpassungen befinden sollten, und ~ / .bashrc sollte / etc / bashrc ausführen, um das Standardverhalten für nicht angemeldete Shells zu übernehmen.
Chris Seite

1
Für einzelne Benutzer ist es am besten, diese Anpassungen zu Ihrem Ausgangsverzeichnis unter hinzuzufügen ~/.bashrc, nicht unter /etc/bashrc. /etc/bashrcsind die globalen Einstellungen für alle Benutzer auf Ihrem System, was wahrscheinlich nicht das ist, was Sie wollen. Außerdem kann Apple in /etc/bashrcregelmäßigen Abständen Änderungen vornehmen, die Ihre Anpassungen zum Erliegen bringen können.
Stefan Lasiewski

1

Verwenden Sie die .profile-Datei, um alles hinzuzufügen, was Sie einer Linux .bashrc-Datei hinzufügen würden.

Zum Beispiel

PATH=/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/:/opt/local/bin:/opt/depot_tools/:~/bin:$PATH
alias t='/Users/<username>/.todo/todo.sh'
alias punch='python /Users/<username>/.todo/Punch.py'
alias clock='cat </dev/tcp/time.nist.gov/13'
alias sudotext="sudo /Applications/TextEdit.app/Contents/MacOS/TextEdit" 

2
Ich empfehle die Verwendung von ~ / .bash_profile (anstelle von ~ / .profile), es sei denn, Sie möchten, dass Ihre Anpassungen in anderen Shells wirksam werden und diese kompatibel sind.
Chris Seite

Nur um sicherzugehen, dass dies kein Problem des Profils "Linux = .bashrc vs. Mac OS =. (Bash_)" ist, funktionieren die Shell-Startdateien unter Linux und Mac gleich, und die Datei .bashrc ist der direktere Ort für die Sitzung spezifische Einstellungen. Wenn Sie beispielsweise tmux oder screen verwenden, haben Sie möglicherweise keine Anmeldesitzungen, möchten aber dennoch Ihre Aliase. Der Grund, warum Mac sich anders fühlt, ist, dass die meisten Linux-Distributionen Systemprofilskripte oder Gerüstprofile liefern, die bereits bashrc delegieren (Quelle).
Eckes
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.