Z powodu pracy ostatnio zacząłem używać systemu OS X i skonfigurowałem go za pomocą homebrew, aby uzyskać podobne wrażenia jak w przypadku Linuksa.
Istnieje jednak kilka różnic w ich ustawieniach. Niektóre muszą znajdować się na jednym systemie. Ponieważ moje pliki dot żyją w repozytorium git, zastanawiałem się, jaki przełącznik mogę ustawić, aby niektóre konfiguracje były odczytywane tylko dla systemu Linux, a inne dla OS X.
Jeśli chodzi o pliki dotfile, to mam na myśli między innymi .bash_profiles
lub .bash_alias
.
if (exists rcfile.local); source rcfile.local; endif
, przetłumaczone na odpowiedni plik rc. Główny plik rc staram się utrzymać agnostyczny system, podczas gdy.local
wersja ma ustawienia specyficzne dla systemu. Jeśli chcesz mieć to wszystko w jednym repozytorium, możesz mieć katalogi systemowe i dowiązać plik rcfile.local do pliku w odpowiednim katalogu.Odpowiedzi:
Zachowaj możliwie największą przenośność plików dot i unikaj ustawień zależnych od systemu operacyjnego lub przełączników, które wymagają określonej wersji narzędzia, np. Unikaj składni GNU, jeśli nie używasz oprogramowania GNU we wszystkich systemach.
Prawdopodobnie natkniesz się na sytuacje, w których pożądane jest użycie ustawień specyficznych dla systemu. W takim przypadku użyj instrukcji switch z indywidualnymi ustawieniami:
W przypadku, gdy pliki konfiguracyjne dowolnych aplikacji wymagają różnych opcji, możesz sprawdzić, czy aplikacja udostępnia przełączniki zgodności lub inne mechanizmy. Na
vim
przykład możesz sprawdzić wersję i poziom poprawek w celu obsługi funkcji starszych wersji lub wersji skompilowanych z innym zestawem funkcji, których nie masz. Przykładowy fragment z.vimrc
:źródło
uname -s
jest jakuname
. uname oznacza nazwę Unix.-s
?uname
sam był kanonicznym sposobem robienia tego od dziesięcioleci i jest określony przez POSIX. Oryginałuname
(w PWB Unix) nie miał żadnej opcji.-s
tę odpowiedź i będę o tym pamiętać w przyszłych skryptach.set
naprawdę powinny być U + 201C i U + 201D, a nie U + 0022?Jeśli martwisz się tylko o pliki, które są faktycznie wykonywane, takie jak .bash_profiles i znajomi, możesz być w stanie uniknąć np.
uname
Różnicowania w zależności od systemu, na którym działa kod.Na przykład całkowicie niesprawdzony i z zastrzeżeniem, że nie mam OS X do wypróbowania, jeśli obecnie masz Linux:
oraz w systemie Mac OS X:
(gdzie
-x
zmusza OS X dols
robienia czegoś, co domyślnie robi GNU ls), to można je połączyć w coś takiego:Jedynym wymaganiem jest więc, aby
uname -s
działał w większości w ten sam sposób (powinien, ponieważ oba systemy są w rozsądnym zakresie POSIX-y i uname -s jest wymagany przez POSIX (dziękuję Marco za zwrócenie na to uwagi )) oraz, że składnia do rozgałęziania skryptu powłoki oparte na porównaniu ciągów jest takie samo. Prawdopodobnie możesz również przeprowadzić test w oparciu o inne kryteria; np. możesz poszukać / etc / lsb_release, sprawdzić, czy / proc / sys / kernel / ostype zawiera „Linux”, lub jakiekolwiek inne testy, jakie możesz wymyślić.źródło
Darwin
Właśnie sprawdziłem.-o
Przełącznik uname nie jest POSIX i nie działa w wielu systemach, np. Solaris.-s
jest obowiązkowy w POSIX i najbardziej zgodny sposób. IEEE Std 1003.1OSTYPE
nie jest dostępny w powłoce POSIX. Nie powiedzie się na przykład podczas domyślnej instalacji FreeBSD i można go używać tylko w.bashrc
lub.zshrc
. Nie działa niezawodnie w.profile
,.alias
itp. Ponieważ mówimy tutaj o kompatybilności, radzę iść bezpieczną drogą, zamiast polegać na konkretnych funkcjach powłoki, które nie są gwarantowane w każdym systemie.