Zmieniłem zmienną „HOME” i teraz nie mogę znaleźć „~ / .bash_profile”, aby zmienić ją z powrotem

15

Bałam się zmiennymi środowiskowymi na moim komputerze Mac, próbując nauczyć się ich używać, i użyłem polecenia, w nano ~/.bash_profilektórym następnie dodałem wiersz, HOME=/Users/MyCompName/Desktopaby zaktualizować zmienną domową.

Ta zmiana działała i można ją zobaczyć, gdy używam printenvdo przeglądania wszystkich zmiennych środowiskowych, ale kiedy poszedłem zmienić, HOMEnie mogłem ~/.bash_profilejuż jej znaleźć . Gdzie to poszło?

Matt
źródło
9
Zasadniczo ~oznacza$HOME
el.pescado,
6
... więc jeśli przedefiniujesz $HOME, to też ~zostanie przedefiniowany
el.pescado

Odpowiedzi:

32

Jest w tym samym miejscu.

Zanim zmiana ~rozwinie się w coś podobnego /Users/YourUserName, powłoka znajdzie ją .bash_profiletam. Po pobraniu plik ~rozwija się do innej ścieżki, więc ~/.bash_profilenie wskazuje już odpowiedniego pliku. Jest tak, ponieważ w tym kontekście ~oznacza $HOME.

Jeśli znasz pełną ścieżkę do swojego katalogu domowego, możesz jej użyć zamiast ~. W Macu prawdopodobnie wyglądałoby to tak:

nano /Users/YourUserName/.bash_profile

Lub pozwól swojemu Bashowi poszukać twojego katalogu domowego w bazie danych użytkowników zamiast tylko patrzeć $HOME. Nie wymaga to od Ciebie zapamiętywania:

nano ~YourUserName/.bash_profile

Modyfikowanie HOMEzmiennej bez zmiany rzeczywistego katalogu domowego nie jest najlepszym pomysłem. Zmiana katalogu domowego dowolnego użytkownika jest zadaniem administracyjnym, zwykle zwykli użytkownicy nie mogą tego zrobić.

rev Kamil Maciorowski
źródło
Niesamowite, udało mi się go znaleźć dzięki! Czy mógłbyś zastanowić się, co rozumiesz przez „po uzyskaniu pliku”? Nie jestem zaznajomiony z tym, co to znaczy pozyskiwać plik
Matt
6
@Matt .bash_profilema formę skryptu Bash. Możesz uruchomić skrypt lub pobrać go. Uruchomienie oznacza utworzenie podpowłoki i wykonanie skryptu wiersz po wierszu. Sourcing oznacza wykonanie skryptu w bieżącej powłoce. Niektórych zadań, które mają wpływać na bieżącą powłokę, nie można wykonać w podpowłoce; zmiana zmiennej dla bieżącej powłoki jest jedną z nich. Dlatego niektóre pliki są pobierane, a nie wykonywane w podpowłoce. Aby ręcznie pobrać plik, użyj . file( .jest określony przez POSIX) lub source file( sourcejest rozszerzeniem innym niż POSIX rozumianym przez kilka powłok).
Kamil Maciorowski
2
Jeśli (Matt) nie wiesz, gdzie był twój katalog domowy, możesz nano ~YourUserName/.bash_profilezamiast tego użyć . Spowoduje to wyszukiwanie twojego katalogu domowego w bazie danych użytkowników, a nie tylko patrzenie na $ HOME.
Stig Hemmer,
1
@StigHemmer Odpowiedzią jest teraz wiki społeczności. Twój przydatny komentarz został przyswojony. Dziękuję Ci.
Kamil Maciorowski