.profile i .bashrc nie działają na moim komputerze Mac
29
Ten problem mam od dłuższego czasu. Po uruchomieniu terminalu .profile i .bashrc plik nie działa (nie są wykonywane). Czy możesz wskazać, gdzie powinienem szukać źródła problemu?
sprawdź, czy te pliki mają odpowiednie uprawnienia
tak ... masz rację powód był naprawdę głupi - nieprawidłowe uprawnienia chmod + x ~ / .profile i wszystko działa dobrze.
5
@xTrol: To nie ma sensu, ~/.profilenie wymaga pozwolenia na wykonanie. (Powłoka je pozyskuje, nie wykonuje). Spróbuj chmod -x ~/.profilesprawdzić, czy nadal działa.
Keith Thompson,
Odpowiedzi:
40
Miałem podobny problem z tym, że .profilenie byłem prowadzony. Okazuje się (jak wyjaśniono w odpowiedzi Apple StackExchange ), że jeśli masz .bash_profilelub .bash_loginpliki, to .profilezostanie zignorowany przez bash.
Mój problem polegał na tym, że zainstalowałem Python, który automatycznie utworzył plik .bash_profile, co spowodowało, że mój .profile nie uruchomił się.
5
Ta odpowiedź mi pomaga. .bash_loginzostał dodany po instalacji rvm.
17
Myślę, że te pytania i odpowiedzi powinny przejść do Superuser, ale w każdym razie:
/etc/profilei ~/.profilejest czytany dla interaktywnej powłoki logowania, oraz
~/.bashrc jest odczytywany dla interaktywnej powłoki niezalogowanej.
Jeśli Twój drugi komputer z systemem UNIX automatycznie czyta ~/.bashrcnawet interaktywną powłokę logowania, dzieje się tak dlatego, że w całym systemie /etc/
profileznajduje się linia, która czyta ~/.bashrc. System OS X /etc/profilenie ma takiego systemu.
Tak więc, jeśli chcesz uruchomić ~/.bashrcnawet dla interaktywnej powłoki logowania, musisz dołączyć linię
I aby uzupełnić brakujący fragment tutaj: Powłoka terminalu (o którą było pytanie PO) jest domyślnie interaktywną powłoką logowania.
LarsH
3
Spróbuj pozyskać je „ręcznie”:
source ~/.profile
i zobacz co się stanie. Zauważ, że jak zauważyli inni, plik .profile jest pozyskiwany z powłok logowania, a .bashrc z powłok innych niż login; więc spróbuj jednego lub drugiego, a nie obu.
Kluczowym punktem jest tutaj „ -” przed nazwą powłoki; który mówi powłoce, aby przeszła przez profil i powiązane rzeczy. Jeśli nie widzisz tego w swoich obecnych oknach, być może będziesz musiał omijać ustawienia, dopóki tego nie zrobisz.
Panel ustawień w preferencjach terminala zawiera także opcję powłoki. Mam / bin / sh na liście w moim.
Nie powinieneś tego potrzebować
Jeśli najgorsze dojdzie do najgorszego, możesz zrobić tak, jak to robiłem na niektórych innych niechętnych do współpracy systemach w przeszłości - stworzyłem program „loginsh”, który mogłem uruchomić z systemu Windows, a on z kolei wykonałby moją wybraną powłokę za pomocą „ -” przedrostek informujący, że ma on działać jako powłoka logowania.
#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);}
(Procedury "stderr.h"nagłówka i „ err_*” są pakietem raportowania błędów, którego używam wszędzie. jlss_basename()Funkcja jest zasadniczo taka sama, jak wersje systemowa, taka jak w POSIX <libgen.h>.)
Dobre informacje powyżej, ale pomyślałem, że podzielę się szczegółami na temat mojego problemu i rozwiązania, które znalazłem.
Konieczność: Dodaj katalog do PATH na OSX 10.8 (ML).
Problem: Poradnik często „modyfikuje plik .profile w twoim katalogu domowym”. Trochę mylące, ponieważ domyślnie ten plik nie istnieje w OSX. Podwójnie mylące, ponieważ po dodaniu instrukcji eksportu w celu dołączenia nowego katalogu do istniejącej ŚCIEŻKI ... to nie działa. Objęte powyżej.
Rozwiązanie: dodałem instrukcję eksportu do mojego pliku .bash_profile (również w katalogu domowym).
Jestem pewien, że istnieje wiele sposobów na skórowanie tego kota. Ten działał dla mnie. Nieco inspirujące zaufanie: profil .bash już istniał i widziałem, że inne zainstalowane oprogramowanie (np. Ruby) zmodyfikowało go. Jeśli istnieje lepsze rozwiązanie, chętnie o nim usłyszę!
~/.profile
nie wymaga pozwolenia na wykonanie. (Powłoka je pozyskuje, nie wykonuje). Spróbujchmod -x ~/.profile
sprawdzić, czy nadal działa.Odpowiedzi:
Miałem podobny problem z tym, że
.profile
nie byłem prowadzony. Okazuje się (jak wyjaśniono w odpowiedzi Apple StackExchange ), że jeśli masz.bash_profile
lub.bash_login
pliki, to.profile
zostanie zignorowany przez bash.źródło
.bash_login
został dodany po instalacjirvm
.Myślę, że te pytania i odpowiedzi powinny przejść do Superuser, ale w każdym razie:
Zgodnie z wezwaniem sekcji strony man ,
/etc/profile
i~/.profile
jest czytany dla interaktywnej powłoki logowania, oraz~/.bashrc
jest odczytywany dla interaktywnej powłoki niezalogowanej.Jeśli Twój drugi komputer z systemem UNIX automatycznie czyta
~/.bashrc
nawet interaktywną powłokę logowania, dzieje się tak dlatego, że w całym systemie/etc/ profile
znajduje się linia, która czyta~/.bashrc
. System OS X/etc/profile
nie ma takiego systemu.Tak więc, jeśli chcesz uruchomić
~/.bashrc
nawet dla interaktywnej powłoki logowania, musisz dołączyć linięw twoim
~/.profile
.źródło
Spróbuj pozyskać je „ręcznie”:
i zobacz co się stanie. Zauważ, że jak zauważyli inni, plik .profile jest pozyskiwany z powłok logowania, a .bashrc z powłok innych niż login; więc spróbuj jednego lub drugiego, a nie obu.
źródło
W preferencjach terminalu sprawdź w okienku „Uruchamianie”. Masz opcje:
Wybrałem opcję „domyślną” ... jeśli wybrano niestandardowe polecenie, może to być czynnik.
Następnym punktem do sprawdzenia jest to, czy powłoka jest uruchamiana jako powłoka logowania. Kiedy robię
ps
wpis, widzę:Kluczowym punktem jest tutaj „
-
” przed nazwą powłoki; który mówi powłoce, aby przeszła przez profil i powiązane rzeczy. Jeśli nie widzisz tego w swoich obecnych oknach, być może będziesz musiał omijać ustawienia, dopóki tego nie zrobisz.Panel ustawień w preferencjach terminala zawiera także opcję powłoki. Mam / bin / sh na liście w moim.
Nie powinieneś tego potrzebować
Jeśli najgorsze dojdzie do najgorszego, możesz zrobić tak, jak to robiłem na niektórych innych niechętnych do współpracy systemach w przeszłości - stworzyłem program „loginsh”, który mogłem uruchomić z systemu Windows, a on z kolei wykonałby moją wybraną powłokę za pomocą „
-
” przedrostek informujący, że ma on działać jako powłoka logowania.(Procedury
"stderr.h"
nagłówka i „err_*
” są pakietem raportowania błędów, którego używam wszędzie.jlss_basename()
Funkcja jest zasadniczo taka sama, jak wersje systemowa, taka jak w POSIX<libgen.h>
.)źródło
Dobre informacje powyżej, ale pomyślałem, że podzielę się szczegółami na temat mojego problemu i rozwiązania, które znalazłem.
Konieczność: Dodaj katalog do PATH na OSX 10.8 (ML).
Problem: Poradnik często „modyfikuje plik .profile w twoim katalogu domowym”. Trochę mylące, ponieważ domyślnie ten plik nie istnieje w OSX. Podwójnie mylące, ponieważ po dodaniu instrukcji eksportu w celu dołączenia nowego katalogu do istniejącej ŚCIEŻKI ... to nie działa. Objęte powyżej.
Rozwiązanie: dodałem instrukcję eksportu do mojego pliku .bash_profile (również w katalogu domowym).
Jestem pewien, że istnieje wiele sposobów na skórowanie tego kota. Ten działał dla mnie. Nieco inspirujące zaufanie: profil .bash już istniał i widziałem, że inne zainstalowane oprogramowanie (np. Ruby) zmodyfikowało go. Jeśli istnieje lepsze rozwiązanie, chętnie o nim usłyszę!
źródło