Czy ktoś może wyjaśnić, co oznacza to polecenie?
PATH="${GZIP_BINDIR-'/bin'}:$PATH"; export PATH
${GZIP_BINDIR-'/bin'}
to bash
wzorzec ekspansji parametrów. Od man bash
:
${parameter:-word}
Use Default Values. If parameter is unset or null,
the expansion of word is substituted. Otherwise, the value of parameter
is substituted.
Bezpośrednio przed tą częścią strona podręcznika ma (dzięki @jwodder za powiadomienie):
Omitting the colon results in a test only for a parameter that is unset.
Jak mówi strona podręcznika, ustawi domyślną wartość zmiennej GZIP_BINDIR
. Jeśli GZIP_BINDIR
wcześniej ustawiono wartość (inną niż null, ponieważ nie używasz :
), wówczas ta wartość zostanie użyta, w przeciwnym razie /bin
zostanie użyta jako wartość zmiennej GZIP_BINDIR
.
Z drugiej strony, jeśli chcesz również przetestować wartości zerowe, użyj tego wzorca (dołącz :
):
${GZIP_BINDIR:-'/bin'}
Następnie $PATH
zostanie rozszerzony do wartości, które wcześniej trzymał. Więc jeśli PATH
wcześniej miał:
/usr/sbin:/usr/bin
Teraz twój PATH
będzie (biorąc pod uwagę, że GZIP_BINDIR
nie jest ustawiony):
/bin:/usr/sbin:/usr/bin
export PATH
udostępni to PATH
wszystkim procesom potomnym.
:
w${GZIP_BINDIR-'/bin'}
” Niekoniecznie.${parameter-word}
jest również poprawny, choć nie wydaje się, że znajduje się na stronie podręcznika.:-
mówi: „Gdy nie wykonuje się rozszerzenia podciągów, używając formularzy opisanych poniżej (np .: :-), test bash dla parametru, który jest nieustawiony lub zerowy. Pominięcie dwukropka daje wynik testu tylko dla parametru, który nie jest ustawiony. ”PATH
iexport
w jedno polecenie w następujący sposób:export PATH="${GZIP_BINDIR-'/bin'}:$PATH"
Czy naprawdę nie ma dwukropka przed łącznikiem wewnątrz rozwinięcia parametru
${GZIP_BINDIR-'/bin'}
?Tego rodzaju konstrukcja jest prawie zawsze zapisywana dwukropkiem,
${GZIP_BINDIR:-'/bin'}
co oznacza, że „jeśli $ GZIP_BINDIR ma wartość NULL lub jest nieustawione, ustaw ją na„ / bin ””Podana składnia jest jednak poprawna, ale rzadka.
${GZIP_BINDIR-'/bin'}
(bez dwukropka) oznacza: „jeśli $ GZIP_BINDIR jest rozbrojony, ustaw go na„ / bin ””. Jeśli jest ustawiony (został zadeklarowany), ale nic mu nie przypisano (np. Ma wartość NULL), nic nie zostanie wstawione.Może występować tutaj błąd, ponieważ dwukropek następujący po konstrukcji zmiennej (...}
:
$ PATH ...) będzie nadal wstawiany, jeśli $ GZIP_BINDIR jest ustawiony, ale NULL. Ponieważ spowoduje to dodanie dwukropka na początku zmiennej $ PATH, spowoduje to przeszukanie bieżącego katalogu w pierwszej kolejności.Jest to uważane przez większość za problem z bezpieczeństwem, ponieważ ułatwia wywołanie złośliwego programu o takiej samej nazwie jak standardowe polecenia, po prostu umieszczając go w bieżącym katalogu.
Aby pozostawić $ PATH bez zmian, jeśli $ GZIP_BINDIR jest ustawiony, ale NULL (pusty), poprawna składnia to
${GZIP_BINDIR-'/bin:'}$PATH; export PATH
Aby pozostawić $ PATH bez zmian, jeśli $ GZIP_BINDIR jest albo nieuzbrojone, albo ustawione, ale NULL, poprawna składnia to
${GZIP_BINDIR:-'/bin:'}$PATH; export PATH
źródło
To polecenie aktualizuje zmienną PATH.
PATH
Jest zmienna określająca zbiór katalogów, w których znajdują się programy wykonywalne.To dodaje wartość innej zmiennej,
GZIP_BINDIR
jeśli wyjście do poprzedniej ŚCIEŻKI, zamiast tego użyj / bin i dodaj ją do ŚCIEŻKIeksport służy do ustawienia ŚCIEŻKI dostępnej dla wszystkich procesów potomnych i podpowłok Przeczytaj to, aby uzyskać więcej informacji na temat
Musisz pamiętać, że nie jest to statyczne i stracisz je po wyjściu z powłoki.
Aby trwale edytować ŚCIEŻKĘ, musisz dołączyć te linie do swojego
.bashrc
i dodaj linię
następnie uruchom polecenie
źródło