.profile und .bashrc funktionieren auf meinem Mac nicht
29
Dieses Problem habe ich schon lange. Nach dem Ausführen von Terminal .profile und .bashrc Datei funktioniert nicht (werden nicht ausgeführt). Könnten Sie angeben, wo ich nach einer Problemquelle suchen soll?
Überprüfen Sie, ob diese Dateien die richtigen Berechtigungen haben
ja ... du hast recht der grund war echt doof - falsche berechtigungen chmod + x ~ / .profile und alles funktioniert gut.
5
@xTrol: Das macht keinen Sinn, ~/.profileerfordert keine Ausführungsberechtigung. (Die Shell gibt es aus, sie führt es nicht aus). Probieren chmod -x ~/.profileSie aus, ob es noch funktioniert.
Keith Thompson
Antworten:
40
Ich hatte ein ähnliches Problem damit, dass ich .profilenicht geführt wurde. Es stellt sich heraus (wie in erklärte diese Apple - Stack Antwort ) , dass , wenn Sie haben .bash_profileoder .bash_loginDateien, dann .profilewird von bash ignoriert.
Mein Problem war, dass ich Python installiert habe, wodurch automatisch eine .bash_profile-Datei erstellt wurde, die dazu führte, dass mein .profile nicht ausgeführt wurde.
5
Diese Antwort hilft mir. .bash_loginwurde nach der Installation hinzugefügt rvm.
17
Ich denke, diese Fragen und Antworten sollten an den Superuser gehen, aber trotzdem:
/etc/profileund ~/.profilewird für eine interaktive Anmeldeshell gelesen, und
~/.bashrc wird für eine interaktive Shell ohne Anmeldung gelesen.
Wenn Ihr anderer UNIX-Computer ~/.bashrcauch für eine interaktive Anmeldeshell automatisch liest , liegt das daran, dass die systemweite /etc/
profileZeile liest ~/.bashrc. OS X hat systemweit /etc/profilekeine.
Wenn Sie also ~/.bashrcauch für eine interaktive Anmeldeshell ausgeführt werden möchten , müssen Sie eine Zeile einfügen
Und um das fehlende Teil hier auszufüllen: Eine Terminal-Shell (worum es in der OP-Frage ging) ist standardmäßig eine interaktive Login-Shell.
LarsH
3
Versuchen Sie, sie "von Hand" zu beschaffen:
source ~/.profile
und sehen, was passiert. Beachten Sie, dass .profile, wie bereits erwähnt, von Anmelde-Shells bezogen wird, .bashrc von Shells, die keine Anmelde-Shells sind. Also versuchen Sie es mit dem einen oder anderen, nicht mit beiden.
Der Schlüsselpunkt hier ist das ' -' vor dem Shell-Namen; Dadurch wird die Shell angewiesen, das Profil und verwandte Inhalte zu durchsuchen. Wenn Sie das in Ihren aktuellen Fenstern nicht sehen, müssen Sie möglicherweise die Einstellungen ändern, bis Sie dies tun.
Der Einstellungsbereich in den Terminaleinstellungen enthält auch eine Shell-Option. Ich habe / bin / sh in meinem aufgelistet.
Das solltest du nicht brauchen
Wenn das Schlimmste zum Schlimmsten wird, können Sie das tun, was ich in der Vergangenheit auf einigen anderen nicht kooperativen Systemen getan habe. Ich habe ein Programm "loginsh" erstellt, das ich unter Windows ausführen kann, und das wiederum meine ausgewählte Shell mit " -" ausführen würde. Präfix, damit es als Anmeldeshell 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 Fehlerberichterstattungspaket, das ich überall verwende. Die jlss_basename()Funktion ist im Grunde die gleiche wie die vom System bereitgestellten Versionen, wie sie in POSIX zu finden sind <libgen.h>.)
Gute Informationen oben, aber ich dachte, ich würde einige Einzelheiten über das Problem und die Lösung, die ich gefunden habe, mitteilen.
Die Notwendigkeit: Fügen Sie PATH unter OSX 10.8 (ML) ein Verzeichnis hinzu.
Das Problem: Die Anleitung lautet häufig "Ändern des .profile in Ihrem Home-Verzeichnis". Ein bisschen verwirrend, da diese Datei unter OSX standardmäßig nicht vorhanden ist. Das ist doppelt verwirrend, denn sobald Sie eine export-Anweisung hinzugefügt haben, um das neue Verzeichnis an den vorhandenen PATH anzuhängen, funktioniert es nicht. Oben abgedeckt.
Die Lösung: Ich habe die export-Anweisung zu meinem .bash_profile hinzugefügt (auch im Home-Verzeichnis).
Ich bin mir sicher, dass es viele Möglichkeiten gibt, diese Katze zu häuten. Dieser hat für mich gearbeitet. Etwas zuversichtlich: Das .bash_profile gab es bereits und ich konnte sehen, dass andere installierte Software (z. B. Ruby) es geändert hatte. Wenn es eine bessere Lösung gibt, würde ich mich freuen, davon zu hören!
~/.profile
erfordert keine Ausführungsberechtigung. (Die Shell gibt es aus, sie führt es nicht aus). Probierenchmod -x ~/.profile
Sie aus, ob es noch funktioniert.Antworten:
Ich hatte ein ähnliches Problem damit, dass ich
.profile
nicht geführt wurde. Es stellt sich heraus (wie in erklärte diese Apple - Stack Antwort ) , dass , wenn Sie haben.bash_profile
oder.bash_login
Dateien, dann.profile
wird von bash ignoriert.quelle
.bash_login
wurde nach der Installation hinzugefügtrvm
.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 Anmeldeshell gelesen, und~/.bashrc
wird für eine interaktive Shell ohne Anmeldung gelesen.Wenn Ihr anderer UNIX-Computer
~/.bashrc
auch für eine interaktive Anmeldeshell automatisch liest , liegt das daran, dass die systemweite/etc/ profile
Zeile liest~/.bashrc
. OS X hat systemweit/etc/profile
keine.Wenn Sie also
~/.bashrc
auch für eine interaktive Anmeldeshell ausgeführt werden möchten , müssen Sie eine Zeile einfügenin deinem
~/.profile
.quelle
Versuchen Sie, sie "von Hand" zu beschaffen:
und sehen, was passiert. Beachten Sie, dass .profile, wie bereits erwähnt, von Anmelde-Shells bezogen wird, .bashrc von Shells, die keine Anmelde-Shells sind. Also versuchen Sie es mit dem einen oder anderen, nicht mit beiden.
quelle
Überprüfen Sie in den Terminaleinstellungen im Bereich "Start". Sie haben folgende Möglichkeiten:
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 Anmeldeshell gestartet wird. Wenn ich eine
ps
Auflistung mache , sehe ich:Der Schlüsselpunkt hier ist das '
-
' vor dem Shell-Namen; Dadurch wird die Shell angewiesen, das Profil und verwandte Inhalte zu durchsuchen. Wenn Sie das in Ihren aktuellen Fenstern nicht sehen, müssen Sie möglicherweise die Einstellungen ändern, bis Sie dies tun.Der Einstellungsbereich in den Terminaleinstellungen enthält auch eine Shell-Option. Ich habe / bin / sh in meinem aufgelistet.
Das solltest du nicht brauchen
Wenn das Schlimmste zum Schlimmsten wird, können Sie das tun, was ich in der Vergangenheit auf einigen anderen nicht kooperativen Systemen getan habe. Ich habe ein Programm "loginsh" erstellt, das ich unter Windows ausführen kann, und das wiederum meine ausgewählte Shell mit "
-
" ausführen würde. Präfix, damit es als Anmeldeshell fungiert.(Die
"stderr.h"
Header- und 'err_*
' -Routinen sind ein Fehlerberichterstattungspaket, das ich überall verwende. Diejlss_basename()
Funktion ist im Grunde die gleiche wie die vom System bereitgestellten Versionen, wie sie in POSIX zu finden sind<libgen.h>
.)quelle
Gute Informationen oben, aber ich dachte, ich würde einige Einzelheiten über das Problem und die Lösung, die ich gefunden habe, mitteilen.
Die Notwendigkeit: Fügen Sie PATH unter OSX 10.8 (ML) ein Verzeichnis hinzu.
Das Problem: Die Anleitung lautet häufig "Ändern des .profile in Ihrem Home-Verzeichnis". Ein bisschen verwirrend, da diese Datei unter OSX standardmäßig nicht vorhanden ist. Das ist doppelt verwirrend, denn sobald Sie eine export-Anweisung hinzugefügt haben, um das neue Verzeichnis an den vorhandenen PATH anzuhängen, funktioniert es nicht. Oben abgedeckt.
Die Lösung: Ich habe die export-Anweisung zu meinem .bash_profile hinzugefügt (auch im Home-Verzeichnis).
Ich bin mir sicher, dass es viele Möglichkeiten gibt, diese Katze zu häuten. Dieser hat für mich gearbeitet. Etwas zuversichtlich: Das .bash_profile gab es bereits und ich konnte sehen, dass andere installierte Software (z. B. Ruby) es geändert hatte. Wenn es eine bessere Lösung gibt, würde ich mich freuen, davon zu hören!
quelle