Próbuję zrozumieć ten fragment kodu:
if [ -f /etc/bashrc ]; then . /etc/bashrc fi
Nie mam pewności co dokładnie oznacza -f.
Odpowiedź
Odpowiednia strona podręcznika do sprawdzenia dotyczy samej powłoki, bash
, ponieważ -f
to funkcja, którą zapewnia powłoka, jest ona wbudowana w bash.
W moim systemie (CentOS 7), dobra strona podręcznika opisuje to. Element grep
może nie dawać takich samych wyników w innych dystrybucjach. Niemniej jednak, jeśli uruchomisz man bash
, a następnie wyszukasz „-f”, powinno dać żądane wyniki.
$ man bash | grep -A1 "\-f file$" -f file True if file exists and is a regular file. $
Odpowiedź
Krótko mówiąc, fragment kodu będzie źródłem pliku /etc/bashrc
, jeśli istnieje, a istnienie jest weryfikowane poleceniem [
, dla którego -f
jest operatorem / parametrem.
if...then...else...fi
w skryptach powłoki ocenia stan zakończenia poleceń – 0 w przypadku pomyślnego zakończenia. Dlatego warto zrobić coś takiego:
if ping -c 4 google.com; then echo "We have a connection!" fi
W twoim przypadku polecenie to [
które jest również znane jako polecenie test
. Dlatego też „d byłoby całkowicie poprawne, aby wykonać
if test -f /etc/bashrc; then . /etc/bashrc fi
Opcja -f flaga weryfikuje dwie rzeczy: podana ścieżka istnieje i jest zwykłym plikiem. Jeśli /etc/bashrc
jest katalogiem lub go brakuje, test powinien zwrócić niezerowy kod zakończenia, aby zasygnalizować błąd.
To polecenie pierwotnie było oddzielnym poleceniem, czyli nie część poleceń wbudowanych powłoki. Obecnie większość powłok podobnych do Bournea ma ją jako wbudowaną i właśnie tego powłoka będzie używać.
Na marginesie, /etc/bashrc
wydaje się niepotrzebnym dodatkowym plikiem, którego używa twój administrator lub oryginalny autor fragmentu kodu. Istnieje /etc/bash.bashrc
, który jest przeznaczony jako ogólnosystemowy plik rc dla bash, więc można by się spodziewać, że zostanie użyty.
Zobacz także: