Come sostituire le utility Mac OS X con le utilità di base GNU?

149

Ho scoperto che ci sono alcune differenze tra il comando di utilità che ho usato su Mac OSX e Linux. Voglio rendere la mia esperienza unita.

Come potrei sostituire tutte le mie utility mac con i programmi di utilità GNU?

    
posta steveyang 22.10.2012 - 16:49
fonte

5 risposte

178

Questo aggiunge i collegamenti simbolici per i programmi di utilità GNU con prefisso g a /usr/local/bin/ :

brew install coreutils findutils gnu-tar gnu-sed gawk gnutls gnu-indent gnu-getopt grep

Vedi brew search gnu per altri pacchetti. Se vuoi utilizzare i comandi senza prefisso ag, installa le formule con --default-names (o --with-default-names se la tua versione brew è più recente), o aggiungi ad esempio /usr/local/opt/coreutils/libexec/gnubin prima di altre directory sul tuo 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
==> Caveats
All 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"
    
risposta data 23.10.2012 - 13:10
fonte
38

Oltre a brew install coreutils , potresti dover installare anche altri pacchetti, ad esempio gnu-sed , grep :

brew install findutils --with-default-names
brew install gnu-indent --with-default-names
brew install gnu-sed --with-default-names
brew install gnutls
brew install grep --with-default-names
brew install gnu-tar --with-default-names
brew install gawk

L'opzione --with-default-names è facoltativa, attiva questa opzione se hai veramente bisogno di usare questi comandi GNU come predefiniti, altrimenti saranno compilati con un prefisso g .

Riferimento: link

    
risposta data 15.04.2013 - 10:30
fonte
14

Non sono sicuro che consiglierei sostituirli ; tuttavia, è possibile installarli su un percorso diverso e utilizzarli in questo modo. Nel complesso, se provieni da Linux e vorresti accedere a più utilità "generiche" * nix e un sistema simile a apt, allora ti consiglio di consultare Macports: link

Permette, per esempio, di usare l'ultimo GCC "generico", in opposizione a / oltre al GCC incluso di Apple, solo come esempio.

    
risposta data 22.10.2012 - 18:06
fonte
6

Ho scritto una sceneggiatura per fare esattamente questo! Lo script può essere visualizzato qui (o sotto). Tuttavia, non posso sempre garantire che questo post rifletta l'ultima versione dello script collegato in precedenza.

Dopo l'esecuzione dello script, verrà installato Homebrew (se non già), verranno installate tutte le utilità GNU associate (se non già) e la variabile PATH verrà creata dalle utility installate.

#!/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_path
for i in /usr/local/Cellar/*/*/bin; do
  echo 'export PATH="'$i':$PATH"' >> ~/.bash_path
done
for i in /usr/local/Cellar/*/*/libexec/gnubin; do
  echo 'export PATH="'$i':$PATH"' >> ~/.bash_path
done
for i in /usr/local/Cellar/*/*/share/man; do
  echo 'export MANPATH="'$i':$MANPATH"' >> ~/.bash_path
done
for 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="\[3[1;32m\]\u@\h\[3[0m\]:\[3[1;34m\]\w\[3[0m\]# "
EOF
  # Add .bash_path to .bash_profile
  echo "source ~/.bash_path" >> ~/.bash_profile
fi
    
risposta data 06.10.2015 - 07:44
fonte
1

Ho scritto uno script che trasforma in modo trasparente la CLI macOS in una nuova esperienza CLI GNU / Linux

  • installazione di programmi GNU mancanti
  • aggiornamento dei programmi GNU obsoleti
  • sostituisce i programmi BSD preinstallati con la loro implementazione GNU preferita
  • installazione di altri programmi comuni tra le più diffuse distribuzioni GNU / Linux

link

$ git clone [email protected]:fabiomaia/linuxify.git
$ cd linuxify/
$ chmod +x linuxify.sh
$ ./linuxify.sh install

Permette anche di annullare facilmente tutto.

$ ./linuxify.sh uninstall
    
risposta data 08.09.2018 - 19:43
fonte

Leggi altre domande sui tag