Współczuję twoim frustracjom, ale wierzę, że w dłuższej perspektywie spowoduje to większą frustrację, jeśli zostaną one zastąpione - Po dążeniu do zrobienia tego samego, co zaleciłbym używać, homebrewjak wspomniano poniżej, a następnie po prostu nauczyć się korzystać z narzędzi z a g( gsed, greadlinkitp.) zamiast zastępowania narzędzi systemowych.
Nie zgadzam się z @cwd, używanie --with-default-nameswpływa tylko na lokalnego użytkownika. Może to być problem z narzędziami terminalowymi zorientowanymi na Mac, ale jeśli używasz homebrew do wszystkiego, możesz również udawać, że używasz Linuksa. Zmieszany z iterm2, działa świetnie dla mnie, mogę w zasadzie udawać, że jestem w domu ze swoimi urządzeniami z linuksem.
Ray Foss,
Odpowiedzi:
209
Dodaje to dowiązania symboliczne dla narzędzi GNU z prefiksem g do /usr/local/bin/:
Zobacz brew search gnuinne pakiety. Jeśli chcesz używać poleceń bez przedrostka ag, dodaj na przykład /usr/local/opt/coreutils/libexec/gnubinprzed innymi katalogami na swoim PATH.
$ brew info coreutils
coreutils: stable 8.21
http://www.gnu.org/software/coreutils
Depends on: xz
/usr/local/Cellar/coreutils/8.20(208 files,9.4M)/usr/local/Cellar/coreutils/8.21(210 files,9.6M)*
https://github.com/mxcl/homebrew/commits/master/Library/Formula/coreutils.rb
==>CaveatsAll commands have been installed with the prefix 'g'.If you really need to use these commands with their normal names, you
can add a "gnubin" directory to your PATH from your bashrc like:
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"Additionally, you can access their man pages with normal names if you add
the "gnuman" directory to your MANPATH from your bashrc as well:
MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"
FWIW mam Homebrew formuła, która działa jako meta-pakiet dla wszystkich tych wielkich GNU utils: patrz shiny-and-gnu.rbw github.com/al-the-x/homebrew-mine
AL X
1
Pierwsza ŚCIEŻKA działa, ale MANPATH zawiodła, dlaczego? Czy to dlatego, że używam OSX10.10? Powtórzyłem echo $ MANPATH i dostałem /usr/local/opt/coreutils/libexec/gnuman:, wydaje się, że oryginalna MANPATH nie została uwzględniona. Po skomentowaniu conf MANPATH w moim bashrc, nic nie dostałem ecoh $MANPATH. I oczywiście, jeśli użyję man pwd, mam instrukcję BSD. Jak to naprawić?
Zen.
2
Dla findutilstrzeba dodawać PATH="/usr/local/Cellar/findutils/4.4.2/bin:$PATH", która nie jest zawarta w wyjścia konsoli instalacji.
Sridhar Sarnobat
1
Ponadto, aby uzyskać odpowiednią stronę podręcznika findutils, dodaj ją do$MANPATH/usr/local/opt/findutils/share/man
Christian Long
1
@Zen: właściwa droga do zainicjowania MANPATHtak aby utrzymać wartość domyślną systemu jest: MANPATH="/usr/local/opt/coreutils/libexec/gnuman:${MANPATH-/usr/share/man}". Klucz jest w konstrukcji ${var-default_value}.
dan
49
Poza tym brew install coreutils, można także zainstalować jakieś inne pakiety, takie jak gnu-sed, grep:
Pamiętaj, że --with-default-namesopcja jest usuwana od stycznia 2019 r., Więc każdy plik binarny musi zostać dodany do ścieżki, jeśli ma być używany bez gprefiksu.
Zauważ, że brew install gawk(w przeciwieństwie do wszystkich innych) zastąpi awk(poprzez dowiązanie symboliczne /usr/local/bin/awk). Jeśli chcesz zachować oryginalny /usr/bin/awk, po prosturm /usr/local/bin/awk
wisbucky
16
Nie jestem pewien, czy zaleciłbym ich wymianę ; Możesz jednak zainstalować je na innej ścieżce i wykorzystać w ten sposób. Ogólnie, jeśli pochodzisz z Linuksa i chciałbyś uzyskać dostęp do bardziej „ogólnych” narzędzi * nix oraz systemu podobnego do apt, to polecam zajrzeć do Macports:
http://www.macports.org
Pozwala to na przykład na użycie najnowszego „ogólnego” GCC, w przeciwieństwie do / oprócz dołączonego GCC Apple, na przykład.
Na przykład tar i zip z Mac OS X wiedzą o metadanych, których nie mają wersje GNU.
lhf 22.10.12
1
Istnieją aplikacje dostarczane przez Apple, które są tylko GUI dla niektórych narzędzi wiersza poleceń, a jeśli je zastąpisz, aplikacje mogą zacząć dziwnie się zachowywać, więc idź z dodawaniem, a nie zastępowaniem.
Ɱark Ƭ
Dobrze; coś takiego jak Macports dodaje je, nie zastępuje.
Jonathan
Jeśli chcesz domyślnie korzystać z narzędzi GNU z MacPorts, możesz dodać /opt/local/libexec/gnubinz przodu PATHzmiennej środowiskowej.
markshep
8
Napisałem skrypt, aby dokładnie to zrobić! Skrypt można obejrzeć tutaj (lub poniżej). Jednak nie zawsze mogę zagwarantować, że ten post będzie odzwierciedlał najnowszą wersję wcześniej połączonego skryptu.
Po uruchomieniu skryptu Homebrew zostanie zainstalowany (jeśli jeszcze nie), wszystkie powiązane narzędzia GNU zostaną zainstalowane (jeśli jeszcze nie), a PATHzmienna zostanie zbudowana z zainstalowanych narzędzi.
#!/bin/bash# Install Homebrew (if not already installed)
ruby -e "$(curl -fsSL "\
"https://raw.githubusercontent.com/Homebrew/install/master/install)"# Install required packages from Homebrew
brew tap homebrew/dupes
brew install coreutils binutils diffutils ed findutils gawk gnu-indent gnu-sed \
gnu-tar gnu-which gnutls grep gzip screen watch wdiff wget bash gdb gpatch \
m4 make nano file-formula git less openssh python rsync svn unzip vim \
--default-names --with-default-names --with-gettext --override-system-vi \
--override-system-vim --custom-system-icons
# Empty the .bash_path file that holds GNU paths>~/.bash_path
# Build PATH variable script in ~/.bash_pathfor i in/usr/local/Cellar/*/*/bin;do
echo 'export PATH="'$i':$PATH"'>>~/.bash_path
donefor i in/usr/local/Cellar/*/*/libexec/gnubin;do
echo 'export PATH="'$i':$PATH"'>>~/.bash_path
donefor i in/usr/local/Cellar/*/*/share/man;do
echo 'export MANPATH="'$i':$MANPATH"'>>~/.bash_path
donefor i in/usr/local/Cellar/*/*/libexec/gnuman;do
echo 'export MANPATH="'$i':$MANPATH"'>>~/.bash_path
done# Check if .bash_path is being called from .bash_profile
PATCH=`grep "~/.bash_path" ~/.bash_profile`if["$PATCH"==""];then# Add Ubuntu-style PS1 to .bash_profile
cat <<EOF >~/.bash_profile
export PS1="\[\033[1;32m\]\u@\h\[\033[0m\]:\[\033[1;34m\]\w\[\033[0m\]# "
EOF
# Add .bash_path to .bash_profile
echo "source ~/.bash_path">>~/.bash_profile
fi
Czy nie uwielbiasz głosów negatywnych bez krytycznych komentarzy? Dziękuję za scenariusz.
Justin Force
@JustinForce Nie ma problemu! Dziękuję za zwrotną informację.
Clay Freeman,
2
-1. Te skrypty powodują zbyt wiele magii. Wszystkie .bash_path-mangling nie jest tak naprawdę konieczne, jeśli postępujesz zgodnie z odpowiedziami @ user495470 i @ xuhdev. A zmiana PS1 jest całkowicie poza zakresem tego pytania.
Greg Dubicki
1
@GregDubicki niestety, ścieżka bash „mangling” jest wymagana dla niektórych z tych pakietów. Możesz to sprawdzić samodzielnie. W odniesieniu do zmiany PS1: ten skrypt jest do użytku osobistego. Każdy, kto chce to cofnąć, może to zrobić bardzo łatwo.
Clay Freeman
5
Napisałem skrypt, który transparentnie przekształca interfejs macOS CLI w nowy interfejs GNU / Linux CLI
instalowanie brakujących programów GNU
aktualizowanie przestarzałych programów GNU
zastępowanie preinstalowanych programów BSD preferowaną implementacją GNU
instalowanie innych programów popularnych wśród popularnych dystrybucji GNU / Linux
Próba uruchomienia pierwszego polecenia ( git clone [email protected].:fabiomaia/linuxify.git) Najpierw napisano: „Nie można ustalić autentyczności hosta„ github.com ”itp.”. Wpisałem yesi nacisnąłem Enter. Potem powiedział [email protected]: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.Co się stało?
izogfif
@izogfif Zamiast tego spróbuj klonować za pomocą HTTPSgit clone https://github.com/fabiomaia/linuxify.git
fabiomaia
1
Tak, zadziałało. Zaktualizuj swoją odpowiedź (usuń te dolary na początku - są one kopiowane po zaznaczeniu tekstu i skopiuj-wklej do konsoli).
homebrew
jak wspomniano poniżej, a następnie po prostu nauczyć się korzystać z narzędzi z ag
(gsed
,greadlink
itp.) zamiast zastępowania narzędzi systemowych.--with-default-names
wpływa tylko na lokalnego użytkownika. Może to być problem z narzędziami terminalowymi zorientowanymi na Mac, ale jeśli używasz homebrew do wszystkiego, możesz również udawać, że używasz Linuksa. Zmieszany z iterm2, działa świetnie dla mnie, mogę w zasadzie udawać, że jestem w domu ze swoimi urządzeniami z linuksem.Odpowiedzi:
Dodaje to dowiązania symboliczne dla narzędzi GNU z prefiksem g do
/usr/local/bin/
:Zobacz
brew search gnu
inne pakiety. Jeśli chcesz używać poleceń bez przedrostka ag, dodaj na przykład/usr/local/opt/coreutils/libexec/gnubin
przed innymi katalogami na swoimPATH
.źródło
shiny-and-gnu.rb
w github.com/al-the-x/homebrew-mine/usr/local/opt/coreutils/libexec/gnuman:
, wydaje się, że oryginalna MANPATH nie została uwzględniona. Po skomentowaniu conf MANPATH w moim bashrc, nic nie dostałemecoh $MANPATH
. I oczywiście, jeśli użyjęman pwd
, mam instrukcję BSD. Jak to naprawić?findutils
trzeba dodawaćPATH="/usr/local/Cellar/findutils/4.4.2/bin:$PATH"
, która nie jest zawarta w wyjścia konsoli instalacji.findutils
, dodaj ją do$MANPATH
/usr/local/opt/findutils/share/man
MANPATH
tak aby utrzymać wartość domyślną systemu jest:MANPATH="/usr/local/opt/coreutils/libexec/gnuman:${MANPATH-/usr/share/man}"
. Klucz jest w konstrukcji${var-default_value}
.Poza tym
brew install coreutils
, można także zainstalować jakieś inne pakiety, takie jakgnu-sed
,grep
:Pamiętaj, że
--with-default-names
opcja jest usuwana od stycznia 2019 r., Więc każdy plik binarny musi zostać dodany do ścieżki, jeśli ma być używany bezg
prefiksu.Stare odniesienie (gdy
--with-default-names
było dostępne): http://www.topbug.net/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x/źródło
brew install gawk
(w przeciwieństwie do wszystkich innych) zastąpiawk
(poprzez dowiązanie symboliczne/usr/local/bin/awk
). Jeśli chcesz zachować oryginalny/usr/bin/awk
, po prosturm /usr/local/bin/awk
Nie jestem pewien, czy zaleciłbym ich wymianę ; Możesz jednak zainstalować je na innej ścieżce i wykorzystać w ten sposób. Ogólnie, jeśli pochodzisz z Linuksa i chciałbyś uzyskać dostęp do bardziej „ogólnych” narzędzi * nix oraz systemu podobnego do apt, to polecam zajrzeć do Macports: http://www.macports.org
Pozwala to na przykład na użycie najnowszego „ogólnego” GCC, w przeciwieństwie do / oprócz dołączonego GCC Apple, na przykład.
źródło
/opt/local/libexec/gnubin
z przoduPATH
zmiennej środowiskowej.Napisałem skrypt, aby dokładnie to zrobić! Skrypt można obejrzeć tutaj (lub poniżej). Jednak nie zawsze mogę zagwarantować, że ten post będzie odzwierciedlał najnowszą wersję wcześniej połączonego skryptu.
Po uruchomieniu skryptu Homebrew zostanie zainstalowany (jeśli jeszcze nie), wszystkie powiązane narzędzia GNU zostaną zainstalowane (jeśli jeszcze nie), a
PATH
zmienna zostanie zbudowana z zainstalowanych narzędzi.źródło
.bash_path
-mangling nie jest tak naprawdę konieczne, jeśli postępujesz zgodnie z odpowiedziami @ user495470 i @ xuhdev. A zmiana PS1 jest całkowicie poza zakresem tego pytania.Napisałem skrypt, który transparentnie przekształca interfejs macOS CLI w nowy interfejs GNU / Linux CLI
https://github.com/fabiomaia/linuxify
Pozwala również łatwo cofnąć wszystko.
źródło
git clone [email protected].:fabiomaia/linuxify.git
) Najpierw napisano: „Nie można ustalić autentyczności hosta„ github.com ”itp.”. Wpisałemyes
i nacisnąłem Enter. Potem powiedział[email protected]: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
Co się stało?git clone https://github.com/fabiomaia/linuxify.git