Mac OS X .bashrc funktioniert nicht

77

Ich habe eine einzeilige .bashrcDatei in meinem Home-Verzeichnis:

alias countlines='find . -type f -print0 | xargs -0 cat | wc -l'

Es wird jedoch kein Alias ​​erstellt. Warum könnte das so sein?

William Jockusch
quelle

Antworten:

101

In OSX .bash_profilewird anstelle von verwendet .bashrc.

Und ja, die .bash_profileDatei sollte sich in befinden /Users/YourName/
(mit anderen Worten, ~/.bash_profile)

Zum Beispiel, /Users/Aaron/.bash_profile

Azz
quelle
11
Das ist nicht die richtige Antwort. Aliase werden nicht vererbt. Wenn Sie sie also nur in .bash_profile definieren, werden sie nicht in nicht angemeldeten Shells definiert (z. B. wenn Sie bash in bash ausführen).
LaC
1
Oder man kann bash_aliases verwenden, was den gleichen Effekt hat wie das Einfügen der Aliase in bashrc, aber besser zu handhaben
Atul Ingle
4
in meinem .bash_profile habe ich nur eine Zeile an alias (eine Art) bashrc geschrieben ->source ~/.bashrc
Eric Hodonsky
86

.[bash_]profileund .bashrckann sowohl unter OS X als auch unter Linux verwendet werden. Ersteres wird geladen, wenn die Shell eine Anmeldeshell ist. Letzteres, wenn es nicht ist. Der eigentliche Unterschied besteht darin, dass Linux eine Anmeldeshell ausführt, wenn sich der Benutzer bei einer grafischen Sitzung anmeldet. Wenn Sie dann eine Terminalanwendung öffnen, sind diese Shells keine Anmeldeshells. Während OS X bei der grafischen Anmeldung keine Shell ausführt und wenn Sie eine Shell von Terminal.app ausführen, handelt es sich um eine Anmeldeshell.

Wenn Sie möchten, dass Ihre Aliase sowohl in Anmelde- als auch in Nicht- Anmelde -Shells funktionieren (und das tun Sie normalerweise), sollten Sie sie in .bashrc und source .bashrc in Ihrem .bash_profile mit einer Zeile wie der folgenden einfügen:

[ -r ~/.bashrc ] && source ~/.bashrc

Dies gilt für alle Systeme, die bash verwenden.

LaC
quelle
15
+1 mit der Einschränkung, dass alles in .bashrc für Sub-Shells (und Sub-Sub-, Sub-Sub- usw.) erneut ausgeführt wird, was zB PATH=$PATH:/my/private/binarieszu PATH-Bloat führt. Sehen Sie dies für eine Abhilfe.
Gordon Davisson
2
Wahr. Da exportierte Instanzvariablen vererbt werden, setze ich sie .profilestatt .bashrc.
LaC
1
@LaC Kannst du erklären, dass _Sobald exportierte Instanzvariablen vererbt werden, setze ich sie einfach in .profile_...?
Sam
1
@sam, ich weiß nicht, woher "Instanz" kam. Ich habe nur "exportierte Variablen" gemeint. Leider kann ich diesen Kommentar nicht bearbeiten.
LaC
2
@dinosaur: "-r" prüft, ob die Datei lesbar ist.
mhvelplund
7

Oder erstellen Sie einen Sym-Link namens .bash_profile, der auf Ihre .bashrc verweist

ln -s .bashrc .bash_profile
Barrett
quelle
2

Es wird kein Alias ​​verwendet, da .bash_profilees unter .bashrcMac OS X verwendet wird.

Sie haben also zwei Möglichkeiten:

  • Setzen Sie den Alias ​​in Ihren ~/.bash_profile

  • Oder geben Sie .bashrcIhre Quelle von Ihrer ein, .bash_profileindem Sie diese Zeile hinzufügen zu .bash_profile:

    . ~/.bashrc

Wuffers
quelle
1

Führen Sie unter Mac OS X Yosemite den folgenden Befehl aus:

vi ~/.profile

Fügen Sie dann die folgende Zeile hinzu:

source ~/.bashrc

Jetzt speichern und schließen .profile, dann ein neues Terminalfenster öffnen oder einfach ausführen:

source ~/.profile

Siehe auch diese Antwort . Es hat auf v10.10.3 funktioniert.

Ricardo
quelle
Dies ist kaum mehr als eine Wiederholung der Antworten von vor vier Jahren.
G-Man
Klar, einfach lesen und anwenden. Dazu ein kleiner Beitrag - da die anderen genannten Dateien auf meinem Betriebssystem Yosemite nicht verfügbar waren.
Ricardo