Co to jest $PATH?
Jak mogę mieć polecenia / programy, które są dostępne tylko dla mnie?
Widziałem ~/binwcześniej wspomnianą ścieżkę , ale do czego służy i jak z niej korzystać?
Co to jest $PATH?
Jak mogę mieć polecenia / programy, które są dostępne tylko dla mnie?
Widziałem ~/binwcześniej wspomnianą ścieżkę , ale do czego służy i jak z niej korzystać?
Odpowiedzi:
$ PATH to zmienna środowiskowa używana do wyszukiwania poleceń. ~ Jest twoim katalogiem domowym, więc ~ / bin będzie / home / user / bin; jest to normalny katalog.
Na przykład, gdy uruchamiasz „ls” w powłoce, faktycznie uruchamiasz program / bin / ls; dokładna lokalizacja może się różnić w zależności od konfiguracji systemu. Dzieje się tak, ponieważ / bin znajduje się w $ PATH.
Aby zobaczyć ścieżkę i znaleźć lokalizację określonego polecenia:
$ echo $PATH
/home/user/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:...
$ which ls # searches $PATH for an executable named "ls"
/bin/ls
$ ls # runs /bin/ls
bin desktop documents downloads examples.desktop music pictures ...
$ /bin/ls # can also run directly
bin desktop documents downloads examples.desktop music pictures ...
Aby mieć własny prywatny katalog bin, wystarczy dodać go do ścieżki. Zrób to, edytując ~ / .profile (ukryty plik), aby uwzględnić poniższe linie. Jeśli linie są komentowane, musisz je tylko odkomentować; jeśli już tam są, wszystko gotowe!
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ]; then
PATH="$HOME/bin:$PATH"
fi
Teraz musisz utworzyć katalog ~ / bin, a ponieważ .profile jest uruchamiany przy logowaniu i dodaje ~ / bin tylko wtedy, gdy istnieje, musisz zalogować się ponownie, aby zobaczyć zaktualizowaną ŚCIEŻKĘ.
Przetestujmy to:
$ ln -s $(which ls) ~/bin/my-ls # symlink
$ which my-ls
/home/user/bin/my-ls
$ my-ls -l ~/bin/my-ls
lrwxrwxrwx 1 user user 7 2010-10-27 18:56 my-ls -> /bin/ls
$ my-ls # lookup through $PATH
bin desktop documents downloads examples.desktop music pictures ...
$ ~/bin/my-ls # doesn't use $PATH to lookup
bin desktop documents downloads examples.desktop music pictures ...
typesprawdzenie, jak powłoka rozpozna rzeczywiste polecenie; np .: which echoi type echozgłasza różne rzeczy, whichzwraca „/ bin / echo”, ale „typ” zwraca informację, że jest to wbudowana powłoka, którą powłoka woli przed plikiem w „/ bin”.
whichjest lepiej zastępowany przez typelub commandw interaktywnych powłokach i jest całkowicie bezużyteczny w skryptach.
$HOMEzmienna $PATHz jakiegoś powodu nie działa, tzn ~. Zamiast tego należy użyć znaku.
Odnośnie ~/bini poleceń / programów dostępnych tylko dla użytkownika
Najnowsze wersje Ubuntu zawierają ~/binkatalog w twoim $PATH, ale tylko jeśli ~/binkatalog istnieje.
Jeśli nie istnieje:
Upewnij się, że ~/.profilezawiera następujące zwrotki (domyślnie ~/.profilejuż tak jest):
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Utwórz ~/binkatalog:
mkdir -p ~/bin
Uruchom ponownie komputer lub wymuś ponowne przeczytanie przez bash ~/.profile:
exec -l bash
exec -l bashwskazówkę”. Co robi -lflaga? Nie znajduję wyjaśnienia w man exec.
exec -lwykona bash jako powłokę logowania [ wiki.bash-hackers.org/commands/builtin/exec] . Krótko mówiąc, zmusza bash do ponownego przeczytania /etc/profilei ~/.profile. Tylko uruchomienie exec bashspowoduje tylko ponowne przeczytanie ~/.bashrc.