Jestem bardzo nowy w Linuksie i umieściłem następujące polecenie na końcu pliku .profile
w folderze domowym:
export PATH="~/.composer/vendor/bin:$PATH"
Znam problemy zmiennych środowiskowych i ich wartości nieco z systemu Windows, ale w tym przypadku chcę zrozumieć, co robi to polecenie i jakie są jego części:
Co to jest ta „eksportowa” fraza na początku? Czy eksportuje dane, aby były dostępne dla Bash?
Co jest pierwsze,
PATH
a co drugie$PATH
i dlaczego potrzebujemy dwóch?
command-line
bash
environment-variables
JohnDoea
źródło
źródło
export
polecenia, czy nie , ponieważPATH
zmienna jest już oznaczona jako wyeksportowana. (Wypróbuj obie strony, jeśli mi nie wierzysz!)Odpowiedzi:
export
jest poleceniem (a dokładniej wbudowanym Bash , tzn. nie jest plikiem wykonywalnymPATH
, jest to polecenie, które Bash ma wbudowane w siebie).export
ustawia zmienną środowiskową po lewej stronie przypisania na wartość po prawej stronie przypisania; taka zmienna środowiskowa jest widoczna dla procesu, który ją ustawia oraz dla wszystkich podprocesów spawnowanych w tym samym środowisku, tj. w tym przypadku dla instancji Bash, która pobiera źródła~/.profile
i dla wszystkich podprocesów spawnowanych w tym samym środowisku (które mogą obejmować np. również inne powłoki , który z kolei będzie mógł uzyskać do niego dostęp).Pierwszym,
PATH
jak wyjaśniono powyżej, jest zmienna środowiskowa, którą należy ustawićexport
.Ponieważ
PATH
zazwyczaj zawiera coś, gdy~/.profile
pochodzi (domyślnie zawiera/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
), po prostu ustawiającPATH
do~/.composer/vendor/bin
stałabyPATH
zawierać tylko~/.composer/vendor/bin
.Skoro zatem odwołania do zmiennej w poleceniu są zastępowane (lub „rozszerzane”) wartością zmiennej przez Bash w czasie oceny polecenia ,
:$PATH
to jest umieszczane na końcu wartości, która ma zostać przypisana,PATH
tak abyPATH
ostatecznie zawierała~/.composer/vendor/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
( tzn. coPATH
zawiera już plus~/.composer/vendor/bin:
na początku).źródło
https://help.ubuntu.com/community/EnvironmentVariables prawdopodobnie Ci pomoże. Również
man bash
może być bardzo pomocne w zrozumieniu jak to działa (przynajmniej w Bash)W każdym razie -
PATH=
jeśli chodzi o ustawianiePATH
zmiennej, dodawanie nowych ścieżek do przeszukania, dodawanie na końcu już / wcześniej ustawionych ścieżek, za pomocą$PATH
(co jest w zasadzie odniesieniem doPATH
zmiennej).Powiedzmy, że do
PATH
tej pory ustawiłeś coś takiego:a potem ustawiłeś
twoje
PATH
po tym będzie jak:Mam nadzieję, że to ma sens.
Ponadto eksportujesz nową zmienną, aby była znana w twoim środowisku, w tym również w procesach potomnych / podpowłokach.
Pamiętaj tylko, że kolejność ustawionych katalogów
PATH
może być ważna. A coś takiegoPATH="$PATH:a:b:c"
da ci wynik:co wpłynie na kolejność katalogów / ścieżek podczas wyszukiwania polecenia (jeśli masz polecenie w więcej niż jednym z katalogów, zostanie użyte pierwsze znalezione - co może czasami dać nieoczekiwane rezultaty).
źródło
Oto polecenie, aby każdy mógł śledzić przebieg pocisków.
export PATH="~/.composer/vendor/bin:$PATH"
export
Wbudowana powłoka (co oznacza, że nie ma/bin/export
, to sprawa powłoki) zasadniczo udostępnia zmienne środowiskowe innym programom wywoływanym zbash
(patrz powiązane pytanie w Dodatkowym czytaniu) i podpowłokach.PATH
później zapisywane w zmiennej.$PATH
jest domyślnymPATH
przypisaniem (lub przynajmniej, jak wygląda zmienna do momentu pojawienia się tego polecenia w twoim.bashrc
lub.profile
), i rozwiń je.~/.composer/vendor/bin
rozwinie się do/home/username/.composer/vendor/bin
, gdzie.composer
jest ukryty folder ze względu na wiodącą kropkę.~/.composer/vendor/bin:$PATH
zmieniła się teraz w długą listę folderów, oddzieloną przez:
. Wszystko jest ujęte w podwójne cudzysłowy, dlatego uwzględniamy foldery ze spacjami na ich ścieżce.PATH
zmiennej, a zewnętrzne polecenia mogą z niego korzystaćProsty przykład
Moja interaktywna powłoka jest w rzeczywistości
mksh
, co dzieje się równieżexport
polecenie wbudowane. Używającexport
setVAR
, moja zmienna może zostać przekazana i wykorzystana przez kolejny łańcuch poleceń / podprocesów, gdzie wyeksportowałem tę samą zmiennąDodatkowe czytanie
źródło
~
w~/.composer/vendor/bin
nie zostanie poszerzona! Tylda jest rozwijana tylko w kilku specjalnych miejscach, takich jak bezpośrednio po=
znaku.PATH="~/.foo:$PATH"
powoduje w~/.foo:/other/path/dirs...
. Ale~
zostanie rozszerzonyPATH=~"/.foo:$PATH"
, co skutkuje/home/user/.foo:/other/path/dirs...
.Czytałem tutaj i w innych miejscach w sieci, rozmawiałem o tym z przyjacielem i zdecydowałem, że jako student pierwszego roku (być może bardziej początkujący Ubuntu niż niektórzy tutaj mogą myśleć), powinienem zmapować to polecenie - powinienem zrobić mapę i dowiedz się, co to jest i gdzie:
Wstępne dane
Jeśli na razie nie zrozumiałeś czegoś w tym rozdziale - nie martw się, stanie się ono wyraźniejsze, gdy będziesz czytać dalej, ale aby zrozumieć tę sprawę, musisz przeczytać o zmiennych środowiskowych (EV), ich wartościach i celu . Spróbuję teraz wyjaśnić to polecenie prostymi słowami i metodą mapowania, dla nowych przybyszów takich jak ja i tylko dla nowych przybyszów. Próbowałem zrobić wszystko, co w mojej mocy ...
Mapowanie
Oryginalna wartość EV „PATH” dostarczanego z Ubuntu 15.10 to:
W samej notatce polecenia mamy dwie frazy ŚCIEŻKI. Ostatni to $ PATH - $ mówi „wydrukuj oryginalną wartość lub wartości EV obok ciebie”; EV obok niego to EV ŚCIEŻKI.
Mamy eksportowane samej zmiennej ścieżka (stało się dostępne dla procesów podrzędnych, jak również, IE procesów działających w CLI, które nie są faktycznie powłoka Bash, ale bieg wewnątrz niego (jak Drush , który jest Drupal CLI).
Oprócz eksportu rozszerzyliśmy go również: Pierwsza fraza PATH (PATH =) wykorzystała nas do dodania dodatkowej wartości (~ / .composer / vendor / bin :) do wartości oryginalnej (reprezentowanej przez $ PATH).
Dwukropek (:) na końcu nowej wartości, o której wspomniałem w powyższym akapicie, służy do odróżnienia nowej wartości od pierwotnej.
„” To obszar, w którym znajdują się wartości.
~ To folder domowy.
Mam nadzieję, że po wykonaniu tego mapowania polecenie stanie się bardziej zrozumiałe dla studentów pierwszego roku, takich jak ja.
źródło
export
Komenda powoduje zmienne dostępne w podpowłok. Oznacza to, że bez niego zmiennaPATH
nie byłaby widoczna w podpowłokach.PATH
jest wspomniany dwukrotnie:=
znaku.=
znaku. To sprawia, że stara wartość jest częścią nowej wartości.źródło
PATH
nie byłaby widoczna w podpowłokach”. To jest niepoprawne;PATH
jest zmienną środowiskową (która nie jest dokładnie tym samym co zmienna powłoki ), więc jest automatycznie eksportowana, aexport
polecenie jest niepotrzebne.setenv
polecenia.PATH
pochodzi ze środowiska, jest automatycznie eksportowany, więc nie trzeba uruchamiać,export
aby zmiany zostały propagowane do procesów potomnych (w przeciwieństwie do tego, co mówi strona, do której prowadzi łącze).PATH=foo
iexport PATH=foo
zachowują się identycznie.export
jest polecenie buildin bash, środki wyeksportować zmienne być zmienna envirement. (możesz wpisać,help export
aby pochylić się bardziej(znaki, które podążają za poleceniem to parametry, podzielone spacją, więc w tym przypadku jest tylko jeden parametr)
PATH
jest nazwa zmiennej, zwykle predefiniowane varibale przez bash, być nazwane w wielkich liter.=
oznacza, przypisz wartość tej zmiennej.cały ciąg jest wartością zmiennej
$PATH
jest rodzajem funciton bash nazwievariable expantion
bash zastąpi wartość existPATH
w łańcuchu parametrów, przed wysłaniem ciągexport
polecenia:
w spcial char na ścieżce zmiennej i understooded przez wszystkich aplikacji, które chcą skorzystać z tej zmiennej. oznacza separator. więc będą mieli wiele katalogów w zmiennej PATH.źródło