Nie mogę znaleźć .bash_profile w Ubuntu


67

Nie mogę znaleźć .bash_profilew Ubuntu 14.04 w moim /home/userkatalogu. Użyłem ls -apolecenia, aby zobaczyć .bash_profile, ale nie ma takiego pliku.


1
Zamiast tego powinieneś użyć ~/.profile.
muru


1
Dość często brakuje pliku konfiguracyjnego (a nawet katalogów). W takim przypadku oprogramowanie, które powinno je odczytać, będzie korzystało z domyślnej konfiguracji i / lub czytało inne źródła w celu pobrania konfiguracji. Jeśli chcesz zmodyfikować plik konfiguracyjny, który nie istnieje, po prostu utwórz go najpierw.
Bakuriu,

Odpowiedzi:


84

Używa Ubuntu ~/.profile.

możesz stworzyć swój .bash_profilew Ubuntu, ale wtedy .profilenie będzie czytany.

Jeśli czytamy treść .profile:

cat ~/.profile

wynik

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.

Więc użyj ~/.profilezamiast~/.bash_profile


.profile nie działało dla mnie. Musiałem zmieniać .bashrc vim ~/.bashrcnastępnie. ~/.bashrc
Nahid

Użycie .bash_profile nie działa na Ubuntu. Używa Dash jako powłoki logowania GUI, a nie Bash, więc profil bash nie jest czytany.
Jonathan Hartley,

Jeśli edytujesz .profile, musisz się wylogować i zalogować ponownie, aby zobaczyć zmiany.
Jonathan Hartley

8

Podczas wywoływania powłoki bash szuka plików konfiguracyjnych w następującej kolejności:

[0] ~/.bash_profile
[1] ~/.bash_login
[2] ~/.profile

Po znalezieniu pierwszego, to przestaje patrząc na innych, więc jeśli nie ma .bash_profilew moim $HOMEbash nie będzie szukać .bash_logini .profilejuż.

Z tych trzech nazw plików, Ubuntu domyślnie używa .profilenazwy, na którą możesz zmienić, .bash_profilejeśli chcesz:

mv ~/.profile ~/.bash_profile

Teraz, jeśli otwieramy nową powłokę bash za pomocą bash -l, su - $USER, sudo -u $USER -ilub innych poleceń bash, który działa jako powłoka logowania, ~/.bash_profiledostanie pozyskiwane.

Ważne, aby pamiętać:

To, o czym mówiłem do tej pory, dotyczy tylko samego Basha, gdy logujesz się do systemu z GUI, menedżer wyświetlania jest odpowiedzialny za pozyskiwanie odpowiednich plików.

Ubuntu używa gdm3jako menedżera wyświetlania, jeśli spojrzymy na: /etc/gdm3/Xsessionmożemy zobaczyć, że żaden z plików nie zostanie pozyskany, z wyjątkiem .profile:

# First read /etc/profile and .profile
for file in /etc/profile "$HOME/.profile"; do
  if [ -f "$file" ]; then
    source_with_error_check "$file"
  fi
done

więc jeśli używasz GUI do logowania, zachowaj plik pod .profilenazwą, w przeciwnym razie możesz przegapić niektóre zmienne i ustawienia w swoich środowiskach.

Wydaje mi się, że lepszym rozwiązaniem jest utworzenie dowiązania symbolicznego do .profile:

ln -s ~/.profile ~/.bash_profile

Teraz Twoje dane żyją .profile, gdmniczego nie umkną, ładują .bash_profilesię w rzeczywistości .profile, a edycja każdego z nich daje ten sam wynik.

Brakuje .profile?

Jeśli nie masz, .profilepobierz jego kopię tutaj:

cp /etc/skel/.profile ~/.profile

lub

# Remember the note above
cp /etc/skel/.profile ~/.bash_profile

Ale jeśli Bash najpierw szuka ~ / .bash_profile, to dlaczego nie robi tego w Ubuntu? Czy Ubuntu zmodyfikowało Bash? To wydaje się dziwne. man bashna Ubuntu nadal opisuje, jak będzie najpierw szukać .bash_profile.
Jonathan Hartley

.bash_profile Najpierw szuka, nie może go znaleźć (ponieważ nie istnieje), a następnie .bash_loginnie może go znaleźć ponownie (ponieważ Ubuntu nie używa tych dwóch nazw), w końcu szuka .profilei tak, jest. Więc jeśli tworzysz .bash_profilew ~, to zastępujesz ubuntu ~/.profile, jest to domyślne zachowanie bash, nic tu nie zostało zmodyfikowane.
Ravexina

Racja, tak też myślałem na początku! I to, co opisujesz, dzieje się na RHEL. Ale w Ubuntu tak nie jest. Jeśli utworzę plik .bash_profile, nie jest on czytany. Właśnie zdałem sobie sprawę, że dzieje się tak, ponieważ Ubuntu nie używa już „Bash” jako powłoki logowania GUI. Zamiast tego używa „Dash”. Myślę, że jest to prawdą od około 18.04.
Jonathan Hartley,

Brakuje Ci tutaj sensu. Właściwie mówimy o samym bashu, mówię tutaj o tym, że Ubuntu tworzy „.profile”, a nie inne, więc jeśli otworzymy nową powłokę bash (powłokę logowania), to kolejność czytania tych plików, nie „ bez względu na to, jakiej dystrybucji używamy. :)
Ravexina,

Jeśli czytelnicy zmienią nazwę .profile na .bash_profile, jak sugeruje twoja odpowiedź, to dla osób na Ubuntu ten plik nie zostanie odczytany przy logowaniu ani przy otwieraniu terminala. Złamałeś ich system. Jedynym sposobem, w jaki plik zostanie odczytany, jest uruchomienie sesji bash z argumentem „--login”, aby jawnie uczynić go powłoką logowania. To nigdy nie nastąpi automatycznie na ich komputerze.
Jonathan Hartley

5

Oznacza to, że plik nie istnieje. Ale możesz utworzyć plik i wykonać bash/ źródła plik, jeśli bashjest wywoływany jako powłoka logowania. Dlatego za każdym razem logujesz się przez powłokę (na przykład przez ssh).

Jeśli chcesz, aby treść była wykonywana za każdym razem, gdy otwierasz terminal, powinieneś .bashrczamiast tego zmodyfikować plik.


możesz dowiedzieć się, dlaczego brakuje pliku .bash_profile?
Roledenez,

Możesz skopiować go z /etc/skel/katalogu.
Frantique,

Jest to projekt kanoniczny. Ale to nie znaczy, że nie można tego zrobić.
chaos

Wyjaśniłem, że .bash_profilew Ubuntu brakuje komentarzy (i nie działa) w komentarzach do innych odpowiedzi.
Jonathan Hartley

2

Najlepsza odpowiedź do użycia ~/.profilezamiast ~/.bash_profilenie działała dla mnie.

Modyfikacja .bashrczadziałała

Właśnie:

vim ~/.bashrc

Uwaga: używam Ubuntu WSL.


W oryginalnym systemie Linux plik .profile jest stosowany podczas logowania do GUI, łączenia się zdalnie lub logowania do konsoli, tj. Po naciśnięciu klawiszy Ctrl + Shift + F2. Ma reprezentować początkowy czas logowania do komputera, tworząc powłokę, która jest nadrzędna dla wszystkich innych tworzonych następnie procesów. Podejrzewam, że na WSL nie ma czegoś takiego, więc Twój profil .profile może nigdy nie zostać odczytany.
Jonathan Hartley,

dla mnie to samo. ~/.profilepo prostu nie ładuje się domyślnie w Ubuntu 18.04
javapowered

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.