Mac OS X yardımcı programları GNU çekirdek yardımcı programları ile nasıl değiştirilir?


180

Mac OSX'te kullandığım yardımcı program komutu ile linux arasında bazı farklılıklar olduğunu gördüm. Tecrübelerimi birleştirmek istiyorum.

Tüm mac yardımcı programlarımı GNU yardımcı programları ile nasıl değiştirebilirim?




16
Hayal kırıklıklarına sempati duyuyorum, ancak uzun vadede, değiştirilmeleri daha büyük bir hayal kırıklığına neden olacağına inanıyorum - homebrewAşağıda belirtildiği gibi kullanmanızı tavsiye ettiğim şeyi yaptıktan sonra , ve sadece sistem yardımcı programları yerine bir g( gsed,, greadlinkvb).
cwd


3
@Cwd ile aynı fikirde değilim, kullanarak --with-default-namessadece yerel kullanıcıyı etkiler. Bu, mac tabanlı terminal araçlarında bir sorun olabilir, ancak her şey için homebrew kullanıyorsanız, linux kullanıyormuş gibi görünebilirsiniz. İterm2 ile karıştırılmış, benim için harika çalışıyor, temelde linux kutularımla evde olduğumu iddia edebilirim.
Ray Foss

Yanıtlar:


210

Bu, GNU yardımcı programları için g ön ekine sahip sembolik işaretler ekler /usr/local/bin/:

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

brew search gnuDiğer paketler için bakınız . Komutları ag öneki olmadan kullanmak istiyorsanız, örneğin /usr/local/opt/coreutils/libexec/gnubindizininizdeki diğer dizinlerden önce ekleyin 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"

6
FWIW, tüm bu büyük GNU araçlarının için bir meta-paket olarak işlev gören bir Homebrew formülüne sahip bulunmaktadır: bakınız shiny-and-gnu.rbiçinde github.com/al-the-x/homebrew-mine
AL x

1
İlk PATH işe yarıyor ama MANPATH başarısız oldu, neden? OSX10.10 kullandığım için mi? $ MANPATH'ı yankıladım ve anladım /usr/local/opt/coreutils/libexec/gnuman:, orijinal MANPATH da dahil değildi. MANPATH'ın bashrc'imdeki emirlerini açıkladıktan sonra hiçbir şey almadım ecoh $MANPATH. Ve elbette, eğer kullanırsam man pwd, BSD kullanım kılavuzuna sahibim. Bu nasıl düzeltilir?
Zen

2
Bunun için findutils, PATH="/usr/local/Cellar/findutils/4.4.2/bin:$PATH"kurulum konsolu çıkışında belirtilmeyenleri eklemeniz gerekir .
Sridhar Sarnobat

1
Ek olarak, findutilssizin için doğru adam sayfasını bulmak için , bunu kendi ekleyiniz$MANPATH /usr/local/opt/findutils/share/man
Christian Long

1
@Zen: başlatmak için doğru yolu MANPATHvarsayılan sistem değerini tutacak şekilde geçerli: MANPATH="/usr/local/opt/coreutils/libexec/gnuman:${MANPATH-/usr/share/man}". Anahtar yapıda ${var-default_value}.
dan

50

Ayrıca brew install coreutils, aynı zamanda gibi diğer bazı paketleri, yüklemeniz gerekebilir gnu-sed, grep:

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

--with-default-namesSeçeneğin Ocak 2019’dan bu yana kaldırıldığını unutmayın; bu nedenle, gönek olmadan kullanılacaklarsa her ikilinin yola eklenmesi gerekir .

Eski referans (ne zaman --with-default-namesmevcut idi): http://www.topbug.net/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x/


Not brew install gawk(bütün diğerlerinin aksine) yerini alacak awk(sembolik bağlantı yoluyla /usr/local/bin/awk). Orijinali korumak istiyorsanız /usr/bin/awk, sadecerm /usr/local/bin/awk
wisbucky

17

Bunları değiştirmeyi önereceğimi sanmıyorum ; ancak, bunları farklı bir yola kurabilir ve bu şekilde kullanabilirsiniz. Genel olarak, eğer Linux'tan geliyorsanız ve daha "jenerik" * nix araçlarına ve apt'ye benzer bir sisteme erişmek istiyorsanız, Macports'a bakmanızı tavsiye ederim: http://www.macports.org

Örneğin, Apple'ın dahil olduğu GCC'ye ek olarak / buna ek olarak, en son "jenerik" GCC'nin tıpkı bir örnek olarak kullanılmasına izin verir.


3
Örneğin, Mac OS X'ten tar ve zip, GNU sürümlerinin bilmediği meta veriler hakkında bilgi sahibidir.
12'de

1
Bazı komut satırı araçları için yalnızca GUI olan Apple tarafından sağlanan uygulamalar vardır ve bunları değiştirirseniz uygulamalar garip bir şekilde çalışmaya başlayabilir, bu yüzden değiştirme yerine ekleme eklemeye devam edin.
Ɱark Ƭ

Sağ; Macports gibi bir şey onları ekler, yerini almaz.
Jonathan,

GNU yardımcı programlarını varsayılan olarak MacPorts ile kullanmak istiyorsanız, ortam değişkeninizin /opt/local/libexec/gnubinönüne ekleyebilirsiniz PATH.
markshep

8

Tam olarak bunu yapmak için bir senaryo yazdım! Komut dosyası burada (veya aşağıda) görülebilir . Ancak, bu yazının önceden bağlanmış komut dosyasının en son sürümünü yansıtacağını her zaman garanti edemem.

Komut dizisini çalıştırdıktan sonra, Homebrew yüklenecek (zaten değilse), tüm ilişkili GNU yardımcı programları yüklenecek (zaten değilse) ve PATHdeğişken yüklü yardımcı programlardan oluşturulacak.

#!/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="\[\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

1
Sadece kritik öneme sahip yorumların bulunmadığı aşağı oyları sevmiyor musunuz? Senaryo için teşekkürler.
Justin Force

@JustinForce Sorun değil! Geri bildirim için teşekkürler.
Clay Freeman

2
-1. Bu komut dosyaları çok fazla sihir yapar. .bash_path@ User495470 ve @ xuhdev'in yanıtlarını takip ederseniz, tüm yönetim gerçekten gerekli değildir. Ve PS1’i değiştirmek bu sorunun kapsamı dışında.
Greg Dubicki

1
@GregDubicki maalesef, bu paketlerin bazıları için "mangling" bash yolu gerekiyor. Bunu kendin kontrol edebilirsin. PS1'in değiştirilmesiyle ilgili olarak: bu senaryo kişisel kullanım içindir. Geri almak isteyen herkes bunu çok kolay bir şekilde yapabilir.
Clay Freeman,

5

MacOS CLI'yi şeffaf bir şekilde yeni bir GNU / Linux CLI deneyimine dönüştüren bir senaryo yazdım.

  • eksik GNU programlarını kurmak
  • eski GNU programlarının güncellenmesi
  • Önceden kurulmuş BSD programlarını tercih ettikleri GNU uygulamaları ile değiştirmek
  • popüler GNU / Linux dağıtımları arasında ortak olan diğer programları kurmak

https://github.com/fabiomaia/linuxify

git clone https://github.com/fabiomaia/linuxify.git
cd linuxify/
./linuxify install

Aynı zamanda her şeyi kolayca geri almanızı sağlar.

./linuxify uninstall

1
İlk komutu çalıştırmayı denemek ( git clone git@github.com.:fabiomaia/linuxify.git) Önce "github.com" sunucusunun gerçekliği kurulamaz "dedi. Yazdım yesve Enter tuşuna basın. Sonra git@github.com: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.yanlış olan ne dedi ?
izogfif

@izogfif Bunun yerine HTTPS ile klonlamayı deneyingit clone https://github.com/fabiomaia/linuxify.git
fabiomaia

1
Evet, işe yaradı. Lütfen cevabınızı güncelleyin (ayrıca başlangıçta bu dolarları kaldırın - metin seçip konsola kopyaladığınızda kopyalanırlar).
izogfif

@izogfif Önerileriniz için teşekkür ederiz.
fabiomaia
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.