OS X - Utwórz osobisty katalog bin (~ / bin) i uruchamiaj skrypty bez określania ich pełnej ścieżki

19

Staram się więc stworzyć osobisty binkatalog w moim folderze domowym. Utworzyłem następujący folder:

/Users/thi/bin

Umieszczam skrypty w tym folderze, ale jeśli wpiszesz w terminalu:

myScript

To nie działa.

Powiedziano mi, że muszę wyeksportować tę ścieżkę bin, coś z tym związanego echo $PATH, ale nie wiem, jak to zrobić.

Thi G.
źródło
zobacz także pod koniec apple.stackexchange.com/a/98626
nohillside

Odpowiedzi:

20

Musisz dodać następujące elementy do pliku ~/.profile:

export PATH=/Users/thi/bin:$PATH

Następnie source ~/.profile

Pamiętaj, że może być konieczne utworzenie tego pliku, a ponieważ zaczyna się .on od, może nie być widoczny w wyszukiwarce do edycji za pomocą aplikacji takiej jak edytor tekstu. Aby wyświetlić listę wszystkich plików, w tym ukrytych, użyj:

ls -la ~/
tfjgeorge
źródło
Jeśli dodam PATH eksportu = / Users / thi / bin: $ PATH do mojego pliku .bashrc, czy to zadziała? Czy to jest poprawne?
Thi G.,
11
Lepsze użycie $HOME/binzamiast /Users/thi/bin. Będziesz wtedy mógł skopiować swoje ustawienia na inny komputer, na którym Twoja nazwa użytkownika może być inna.
lhf
Jeśli wpiszesz terminal: PATH = $ HOME / bin: $ PATH, a następnie wpisz: export PATH. Czy to załatwi sprawę?
Thi G.,
1
Jeśli to zrobisz, zmieni ustawienia teraz, ale nie w przyszłych butach. Aby zmienić ścieżkę tak, aby przetrwała ponowne uruchomienie, musisz dołączyć te polecenia do swojego .profilepliku.
Daniel
1
Świetnie, dziękuję wszystkim za odpowiedzi. Dodałem export PATH=$HOME/bin:$PATHdo mojego $HOME/.bash_profile.
Thi G.,
10

Jeśli używasz bash, dodaj taką linię do ~/.bash_profile:

PATH=~/bin:$PATH

PATHjest domyślnie zaznaczony do eksportu, więc nie musisz go używać export.

Jeśli oba istnieją ~/.bash_profilei ~/.profileistnieją, bash czyta tylko ~/.bash_profilewtedy, gdy zostanie wywołany jako interaktywna powłoka logowania. ~/.profilejest również używany przez inne powłoki, które mogą nie rozumieć tych samych opcji konfiguracji co bash.

Terminal i iTerm 2 domyślnie otwierają nowe powłoki jako powłoki logowania. Gdy bash jest wywoływany jako interaktywna powłoka logowania, czyta, ~/.bash_profileale nie czyta ~/.bashrc. Emulatory terminali na innych platformach często otwierają nowe powłoki jako powłoki niezalogowane, więc na przykład bash czyta, ~/.bashrcale nie ~/.bash_profile. Użytkownicy OS X często wykorzystują ~/.bash_profilejako pliku konfiguracyjnego osobistego odpowiadającego ~/.bashrcna innych platformach, ale także wspólne źródło ~/.bashrcz ~/.bash_profilelub powiedzieć Terminal lub iTerm 2, aby otworzyć nowe muszle jako muszli zakaz logowania.

Możesz także zmienić ścieżkę bardziej globalnie w /etc/pathslub /etc/launchd.conf, ale w wielu kontekstach ścieżka nadal będzie domyślnie ustawiona na /usr/bin:/bin:/usr/sbin:/sbin. Naprawdę potrzebowałem tylko zmienić ścieżkę w powłokach i edytorach tekstu.

Lri
źródło
Świetnie, dziękuję za odpowiedź. Dodałem export PATH=$HOME/bin:$PATHdo mojego $HOME/.bash_profile.
Thi G.,
Nie potrzebujesz eksportu , a oba ~(gdy nie $HOMEsą cytowane) i są rozwijane przed przypisaniem zmiennej zarówno przy użyciu eksportu, jak i zwykłego przypisania.
Lri
Lauri Ranta, co wolisz osobiście, .bash_profilealbo .profile? A może masz .bashrcw swoim katalogu domowym?
Thi G.,
Kiedyś używałem tylko .bash_profile, ale teraz używam .bashrc jako mojego głównego pliku konfiguracyjnego, a mój .bash_profile tylko zawiera . ~/.bashrc. Nowe powłoki są otwierane jako powłoki niezalogowane w trybie powłoki w emacsie i tmuxie. Nie użyłbym .profile jako mojego głównego pliku konfiguracyjnego, ponieważ jest on również odczytywany przez inne powłoki, takie jak ksh.
Lri
3

Zazwyczaj wstawiasz dodatkowe ścieżki po $PATHpolubieniu, PATH=$PATH:/$HOME/binponieważ jeśli nie chcesz zastępować innego pliku wykonywalnego o tej samej nazwie, który może być /binitp.

Nic MacKenzie
źródło
4
Można łatwo argumentować, że $HOME/binz tego powodu postawiłbyś na początku. Ale najważniejsze jest to, że kolejność katalogów ma $PATHznaczenie i że powłoka wybierze pierwsze pasujące polecenie. Dzięki za zwrócenie na to uwagi.
nohillside