Ich hatte ein ähnliches Problem, .profile
weil ich nicht ausgeführt wurde. Es stellt sich heraus (wie in dieser Apple StackExchange-Antwort beschrieben ), dass, wenn Sie .bash_profile
oder .bash_login
Dateien haben, Ihre .profile
von bash ignoriert werden.
.profile und .bashrc funktionieren auf meinem Mac nicht
Dieses Problem habe ich schon lange. Nachdem das Terminalprofil ausgeführt wurde, funktioniert die .bashrc-Datei nicht (wird nicht ausgeführt). Könnten Sie angeben, wo ich eine Problemquelle suchen muss?
5 Antworten auf die Frage
- Beliebte
- Neu
- Mit Kommentaren
- Aktiv
Ich denke, diese Fragen und Antworten sollten an den Superuser gehen, aber trotzdem:
Gemäß dem Abschnitt INVOCATION der Manpage ,
/etc/profile
und~/.profile
wird für eine interaktive Login-Shell gelesen und~/.bashrc
wird für eine interaktive Shell ohne Login gelesen.
Wenn Ihr anderer UNIX-Rechner ~/.bashrc
selbst für eine interaktive Login-Shell automatisch liest, liegt dies daran, dass das gesamte System /etc/ profile
über eine Zeile verfügt, die liest ~/.bashrc
. OS X /etc/profile
hat kein systemweites System .
Wenn Sie also ~/.bashrc
auch für eine interaktive Login-Shell ausgeführt werden möchten, müssen Sie eine Zeile einfügen
. ~/.bashrc
in deiner ~/.profile
.
Try sourcing them "by hand":
source ~/.profile
and see what happens. Note that, as others have pointed out, .profile is sourced by login shells, .bashrc by non-login shells; so try one or the other, not both.
Überprüfen Sie in den Terminaleinstellungen im Bereich "Start". Sie haben Optionen:
Muscheln öffnen mit:
- Standard-Login-Shell (/ usr / bin / login)
- Befehl (vollständiger Pfad)
Ich habe 'default' gewählt ... wenn Sie den benutzerdefinierten Befehl gewählt haben, kann dies ein Faktor sein.
Der nächste zu überprüfende Punkt ist, ob die Shell als Login-Shell gestartet wird. Wenn ich eine ps
Auflistung mache, sehe ich:
PID TTY TIME CMD 24088 ttys000 0:00.03 -sh 24614 ttys001 0:00.03 -sh 25127 ttys002 0:00.05 -sh 35544 ttys003 0:00.08 -sh 40926 ttys004 0:00.03 -sh
Der Schlüsselpunkt hier ist das ' -
' vor dem Shell-Namen; Dadurch wird der Shell mitgeteilt, dass sie durch das Profil und die dazugehörigen Inhalte laufen soll. Wenn Sie dies nicht in Ihren aktuellen Fenstern sehen, müssen Sie die Einstellungen möglicherweise erst ändern, wenn Sie dies tun.
Der Einstellungsbereich in den Terminaleinstellungen enthält auch eine Shell-Option. Ich habe / bin / sh in meinem aufgelistet.
Sie sollten das nicht brauchen
Wenn das Schlimmste im schlimmsten Fall eintrifft, können Sie dies tun, wie ich es in früheren Zeiten auf anderen unkooperativen Systemen getan habe. Ich habe ein Programm "loginsh" erstellt, das ich unter Windows ausführen konnte. Anschließend würde es meine ausgewählte Shell mit dem ' -
' ausführen. Präfix, damit es als Login-Shell fungiert.
#include <string.h> #include <stdlib.h> #include <unistd.h> #include "stderr.h" #include "jlss.h" #ifndef DEFAULT_SHELL #define DEFAULT_SHELL "/bin/sh" #endif /* DEFAULT_SHELL */ #ifndef MAX_SHELLBASENAME #define MAX_SHELLBASENAME 256 #endif /* MAX_SHELLBASENAME */ #ifndef lint static const char sccs[] = "@(#)$Id: loginsh.c,v 4.2 2005/06/22 19:44:07 jleffler Exp $"; #endif int main(int argc, char **argv) { char *shell; char shellname[MAX_SHELLBASENAME]; err_setarg0(argv[0]); /* Which shell to use? */ if ((shell = getenv("SHELL")) == (char *)0) shell = DEFAULT_SHELL; /* Set up argv[0] in new argument list; reuse old argv space */ shellname[0] = '-'; strcpy(&shellname[1], jlss_basename(shell)); argv[0] = shellname; /* Execv must work -- the shell must be an executable program */ execv(shell, &argv[0]); err_syserr("cannot execute shell %s\n", shell); /* NOTREACHED */ return(EXIT_FAILURE); }
(Die "stderr.h"
Header- und ' err_*
' - Routinen sind ein Fehlerberichtspaket, das ich überall benutze. Die jlss_basename()
Funktion entspricht im Wesentlichen den vom System bereitgestellten Versionen, wie sie in POSIX zu finden sind <libgen.h>
.)
Gute Informationen oben, aber ich dachte, ich würde einige Details zu meinem Problem und der gefundenen Lösung mitteilen.
Die Notwendigkeit: Fügen Sie PATH unter OSX 10.8 (ML) ein Verzeichnis hinzu.
Das Problem: Anleitung ist oft "das Profil in Ihrem Home-Verzeichnis modifizieren". Ein bisschen verwirrend, da diese Datei standardmäßig unter OSX nicht vorhanden ist. Doppelt verwirrend, denn sobald Sie eine Exportanweisung hinzugefügt haben, um das neue Verzeichnis an den vorhandenen PATH anzuhängen, funktioniert es nicht. Oben abgedeckt.
Die Lösung: Ich habe die Exportanweisung zu meinem .bash_profile (auch im Home-Verzeichnis) hinzugefügt.
Ich bin sicher, dass es viele Möglichkeiten gibt, diese Katze zu häuten. Dieser hat für mich gearbeitet. Etwas Zuversicht ermutigend: Das .bash_profile war bereits vorhanden und ich konnte sehen, dass andere installierte Software (z. B. Ruby) sie modifiziert hatte. Wenn es eine bessere Lösung gibt, würde ich mich freuen, davon zu erfahren!
Verwandte Probleme
-
3
Beschleunigung der Bootzeiten von OS X bei einem Jahr alten MBP
-
3
Wie ordnen Sie ein Airport Time Machine-Backup nach der Migration auf einen neuen Mac wieder zu?
-
6
Wie können Sie den Startton auf einem Mac stummschalten?
-
5
Warum wird mein Macbook bei der Verwendung von Boot Camp extrem heiß?
-
7
Gibt es unter Mac OS X ein Strg + Tab-Äquivalent?
-
6
Weg, um Time Machine-Daten auf eine neue Festplatte zu migrieren
-
13
Setzen Sie die Windows-Position von Mac OS X nach dem Abnehmen des externen Monitors zurück
-
10
Sicherungssoftware für Mac OS X
-
5
Wie kann ich unter Mac OS X einen .kext deinstallieren und entfernen?
-
4
Wie kann ich die Auswurftaste auf der MacBook-Tastatur erneut "löschen"?