Co to jest $PATH
?
Jak mogę mieć polecenia / programy, które są dostępne tylko dla mnie?
Widziałem ~/bin
wcześ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 ~/bin
wcześ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 ...
type
sprawdzenie, jak powłoka rozpozna rzeczywiste polecenie; np .: which echo
i type echo
zgłasza różne rzeczy, which
zwraca „/ bin / echo”, ale „typ” zwraca informację, że jest to wbudowana powłoka, którą powłoka woli przed plikiem w „/ bin”.
which
jest lepiej zastępowany przez type
lub command
w interaktywnych powłokach i jest całkowicie bezużyteczny w skryptach.
$HOME
zmienna $PATH
z jakiegoś powodu nie działa, tzn ~
. Zamiast tego należy użyć znaku.
Odnośnie ~/bin
i poleceń / programów dostępnych tylko dla użytkownika
Najnowsze wersje Ubuntu zawierają ~/bin
katalog w twoim $PATH
, ale tylko jeśli ~/bin
katalog istnieje.
Jeśli nie istnieje:
Upewnij się, że ~/.profile
zawiera następujące zwrotki (domyślnie ~/.profile
już 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 ~/bin
katalog:
mkdir -p ~/bin
Uruchom ponownie komputer lub wymuś ponowne przeczytanie przez bash ~/.profile
:
exec -l bash
exec -l bash
wskazówkę”. Co robi -l
flaga? Nie znajduję wyjaśnienia w man exec
.
exec -l
wykona bash jako powłokę logowania [ wiki.bash-hackers.org/commands/builtin/exec] . Krótko mówiąc, zmusza bash do ponownego przeczytania /etc/profile
i ~/.profile
. Tylko uruchomienie exec bash
spowoduje tylko ponowne przeczytanie ~/.bashrc
.