Czy ktoś może wyjaśnić, co oznacza to polecenie?
PATH="${GZIP_BINDIR-'/bin'}:$PATH"; export PATH
Czy ktoś może wyjaśnić, co oznacza to polecenie?
PATH="${GZIP_BINDIR-'/bin'}:$PATH"; export PATH
Odpowiedzi:
${GZIP_BINDIR-'/bin'}to bashwzorzec 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_BINDIRwcześniej ustawiono wartość (inną niż null, ponieważ nie używasz :), wówczas ta wartość zostanie użyta, w przeciwnym razie /binzostanie 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 $PATHzostanie rozszerzony do wartości, które wcześniej trzymał. Więc jeśli PATHwcześniej miał:
/usr/sbin:/usr/bin
Teraz twój PATHbędzie (biorąc pod uwagę, że GZIP_BINDIRnie jest ustawiony):
/bin:/usr/sbin:/usr/bin
export PATHudostępni to PATHwszystkim procesom potomnym.
:-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. ”
PATHi exportw 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
To polecenie aktualizuje zmienną PATH.
PATHJest zmienna określająca zbiór katalogów, w których znajdują się programy wykonywalne.
PATH="${GZIP_BINDIR-'/bin'}:$PATH";
To dodaje wartość innej zmiennej, GZIP_BINDIRjeśli wyjście do poprzedniej ŚCIEŻKI, zamiast tego użyj / bin i dodaj ją do ŚCIEŻKI
export PATH
eksport 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
gedit .bashrc
i dodaj linię
export PATH="${GZIP_BINDIR-'/bin'}:$PATH"
następnie uruchom polecenie
source .bashrc
:w${GZIP_BINDIR-'/bin'}” Niekoniecznie.${parameter-word}jest również poprawny, choć nie wydaje się, że znajduje się na stronie podręcznika.