Polecenia dostępne domyślnie w Terminalu w OS X, nie zachowują się tak, jak ich wersje Linux. Jak mogę je wszystkie zastąpić rzeczywistymi poleceniami GNU Linux?
Na przykład sed -i wymaga dodatkowego irytującego argumentu. Działa również tylko z plikami tekstowymi. To jest bezużyteczne.
-i
flaga jest niestandardowa .ed
służy do edycji plików.Odpowiedzi:
W ogólnym przypadku nie można (lub nie należy ) zastępować domyślnych poleceń. Powodem jest to, że wiele skryptów administracyjnych systemu i pakietów firm trzecich prawdopodobnie polega na tych poleceniach, aby zachowywać się tak, jak działają po wyjęciu z pudełka w systemie OS X.
Więc jeśli po prostu wyczyścisz polecenia systemowe i zastąpisz je odpowiednikami GNU, które mają niezgodne zachowanie lub argumenty wiersza poleceń, prawdopodobnie coś zepsuje. Zwłaszcza jeśli korzystasz z oprogramowania, które zostało „przeniesione” do Mac OS X po tym, jak pierwotnie zostało zaprojektowane do pracy w systemie Linux lub BSD, ponieważ tego rodzaju programy częściej polegają na skryptach powłoki i poleceniach systemowych niż na wywoływaniu API OS X.
To, co możesz zrobić, to zainstalować środowisko, które instaluje narzędzia GNU w innym katalogu bez nadpisywania wartości domyślnych, a następnie dostosuj
PATH
zmienną środowiskową, aby dawała pierwszeństwo poleceniom znajdującym się w katalogu GNU, zanim przeszuka katalogi systemowe. Możesz to załączyć tak, aby ustawiało w ten sposób PATH tylko wtedy, gdy uruchamiasz interaktywną powłokę; możesz google, jak to zrobić,bash
lub zadać inne pytanie na SU (lub poszukać go, ponieważ prawdopodobnie zostało to wcześniej zadane), jeśli chcesz to zrobić.Przykładem takiego środowiska jest Homebrew, który na przykład ma GNU
sed
między innymi. Po zainstalowaniu Homebrew możesz pisaći zainstaluj GNU Coreutils . Będą one zapewnić Państwu
sed
,date
,printf
,wc
oraz wiele innych narzędzi, które są dostarczane z systemu GNU / Linux, lecz nie OS X. Jednak, tak aby nie „Zastąp” default OS X binaria, będą one prefiksemg
domyślnie. Więc po zainstalowaniu Coreutils, jeśli chcesz używać GNU sed, wpiszJeśli jest to zbyt kłopotliwe do wpisywania za każdym razem, możesz dodać katalog „gnubin” do PATH i po prostu wywołać GNU sed
sed
. Musisz dodać do swojego~/.bash_profile
:Oczywiście, jeśli potrzebujesz środowiska Linux od zupy do orzechów (jądro, X11, kompatybilność syscall itp.), Będziesz musiał uruchomić Linuksa na maszynie wirtualnej, takiej jak VirtualBox . Jest to bezpieczny zakład, jeśli potrzebujesz uruchomić oprogramowanie lub skrypty zaprojektowane do działania w systemie Linux.
Homebrew zapewni kompatybilność tylko dla niektórych klas programów, które nie wymagają zachowania specyficznego dla Linuksa. Na przykład
inotify
jest dostępny tylko w systemie Linux.drm
(Direct Rendering Manager) jest dostępny tylko w systemie Linux. Istnieją również inne raczej systemowe wywołania systemowe, które są dostępne tylko w systemie Linux i dla których nie istnieje odpowiednik w systemie OS X, więc przenoszenie niektórych programów z systemu Linux na system OS X może być niepraktyczne lub niemożliwe bez znacznych zmian w kodzie.źródło
brew install coreutils
nie obejmujesed
. Można zrobićbrew install gnu-sed
to jednak instalujegsed
i niesed
, nawet jeśli zaktualizowanie$PATH
. Stworzyłem dowiązanie symboliczne, aby ukryć Macased
:ln -s $(which gsed) $(brew --prefix coreutils)/libexec/gnubin/sed
jednak wciąż musisz zrobić,man gsed
aby zobaczyć odpowiednią stronę podręcznika.brew install gnu-sed --default-names
zainstaluje go jakosed
--default-names
możesz zainstalować za pomocą poleceń z prefiksem g, a następnie zainstalować oh-my-zsh (wysoce zalecane) i włączyć wtyczkę gnu-utils.Możesz użyć prefiksu Gentoo, który obsługuje system OS X, możesz to zrobić, ładując go, a następnie dodając odpowiednie ścieżki w katalogu prefiksów do PATH. Możliwe, że już to dla ciebie robi. Po wykonaniu tej czynności możesz użyć standardowych poleceń Gentoo do instalowania pakietów.
emerge coreutils
dostarczy ci na przykład standardowe narzędzia GNU.Pamiętaj, że Gentoo kompiluje się domyślnie, zamiast tego możesz chcieć skonfigurować hosta binarnego . To jest tylko przy użyciu jednego z adresów URL w drugiej połowie tego artykułu, a umieszczenie go w
PORTAGE_BINHOST="... your url here ..."
w./etc/make.conf
w prefiksie.źródło
Jako kontynuacja posta @ allquixotic, oto oficjalne instrukcje na
brew install coreutils
źródło
W odniesieniu do
sed
ciebie możesz pobrać wstępnie skompilowany plik binarny zRudix
projektu. WięcejRudix
pakietów znajdziesz tutaj i tutaj .źródło