जीएनयू कोर उपयोगिताओं के साथ मैक ओएस एक्स उपयोगिताओं को कैसे बदलें?


179

मैंने पाया कि मैक ओएसएक्स और लाइनक्स पर उपयोग किए जाने वाले उपयोगिता कमांड के बीच कुछ अंतर है। मैं अपने अनुभव को एकजुट करना चाहता हूं।

मैं अपने सभी मैक उपयोगिताओं को GNU उपयोगिताओं के साथ कैसे बदल सकता हूं?



2
यहाँ एक गाइड topbug.net/blog/2013/04/14/…
डेनिस

16
मैं आपकी कुंठाओं के प्रति सहानुभूति रखता हूं, लेकिन मेरा मानना ​​है कि लंबी अवधि में, अगर वे बदल दिए जाते हैं तो इससे बड़ी निराशा पैदा होगी - जैसा कि मैं homebrewनीचे बताए अनुसार उपयोग करने की सलाह दूंगा , और उसके बाद उपयोगिताओं का उपयोग करना सीखूंगा एक g( gsed, greadlink, आदि) के बजाय प्रणाली उपयोगिताओं की जगह की।
cwd


3
मैं @cwd से असहमत हूं, का उपयोग --with-default-namesकरना केवल स्थानीय उपयोगकर्ता को प्रभावित करता है। यह मैक उन्मुख टर्मिनल उपयोगिताओं के साथ एक मुद्दा हो सकता है, लेकिन अगर आप सब कुछ के लिए homebrew का उपयोग करते हैं, तो आप अशुभ दिखा सकते हैं कि आप लिनक्स का उपयोग कर रहे हैं। Iterm2 के साथ मिश्रित, यह मेरे लिए बहुत अच्छा काम कर रहा है, मैं मूल रूप से दिखा सकता हूं कि मैं अपने लिनक्स बॉक्स के साथ घर हूं।
रे फॉस

जवाबों:


209

यह जीयूयू उपयोगिताओं के लिए जी उपसर्ग के साथ सहानुभूति जोड़ता है /usr/local/bin/:

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

brew search gnuअन्य पैकेजों के लिए देखें । यदि आप ag उपसर्ग के बिना कमांड का उपयोग करना चाहते हैं तो उदाहरण के लिए /usr/local/opt/coreutils/libexec/gnubinअपने पर अन्य निर्देशिकाओं से पहले जोड़ें 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, मेरे पास एक Homebrew सूत्र है जो उन सभी महान GNU बर्तनों के लिए मेटा-पैकेज के रूप में कार्य करता है: github.com/al-the-x/homebrew-mineshiny-and-gnu.rb में देखें
AL X

1
पहला PATH काम करता है, लेकिन MANPATH असफल रहा, क्यों? क्या यह इसलिए है क्योंकि मैं OSX10.10 का उपयोग कर रहा हूं? मैंने $ MANPATH को प्रतिध्वनित किया, और मुझे /usr/local/opt/coreutils/libexec/gnuman:लगता है, लगता है कि मूल MANPATH शामिल नहीं था। मेरे बैश आर्क में मैनपाट कॉन्फिडेंस को कमेंट करने के बाद मुझे कुछ नहीं मिला ecoh $MANPATH। और हां, अगर मैं उपयोग करता हूं, तो मुझे man pwdबीएसडी मैनुअल मिला है। इसे कैसे ठीक करें?
झेन

2
इसके लिए findutils, आपको उन्हें जोड़ने की आवश्यकता है PATH="/usr/local/Cellar/findutils/4.4.2/bin:$PATH"जो इंस्टॉलेशन कंसोल आउटपुट में नहीं बताया गया है।
श्रीधर सरनोबत २n

1
इसके अलावा, सही मैन पेज प्राप्त करने के लिए findutils, इसे अपने$MANPATH /usr/local/opt/findutils/share/man
क्रिश्चियन लॉन्ग

1
@Zen: आरंभ करने के लिए सही तरीके से MANPATHके रूप में डिफ़ॉल्ट प्रणाली मूल्य रखने के लिए इतना है: MANPATH="/usr/local/opt/coreutils/libexec/gnuman:${MANPATH-/usr/share/man}"। कुंजी निर्माण में है ${var-default_value}
डैन

49

इसके अलावा brew install coreutils, आप भी इस तरह के रूप में कुछ अन्य संकुल, स्थापित करने के लिए आवश्यकता हो सकती है 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

ध्यान दें कि जनवरी 2019 से --with-default-namesविकल्प को हटा दिया गया है, इसलिए प्रत्येक बाइनरी को पथ में जोड़ा जाना है यदि उन्हें gउपसर्ग के बिना उपयोग किया जाना है ।

पुराना संदर्भ (जब --with-default-namesउपलब्ध था): http://www.topbug.net/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x/


ध्यान दें कि brew install gawk(सभी के विपरीत) awkएक प्रतीकात्मक लिंक के माध्यम से बदल देगा /usr/local/bin/awk। यदि आप मूल रखना चाहते हैं /usr/bin/awk, तो बसrm /usr/local/bin/awk
समझदार

16

मुझे यकीन नहीं है कि मैं उन्हें बदलने की सिफारिश करूंगा; हालाँकि, आप उन्हें किसी भिन्न पथ पर स्थापित कर सकते हैं और उनका उपयोग कर सकते हैं। कुल मिलाकर, यदि आप लिनक्स से आ रहे हैं और अधिक "जेनेरिक" * निक्स उपयोगिताओं, और एपेट के समान एक सिस्टम तक पहुंच चाहते हैं, तो मैं Macports में देखने की सलाह दूंगा: http://www.macports.org

यह, उदाहरण के लिए, Apple के शामिल GCC के विपरीत, नवीनतम "जेनेरिक" GCC का उपयोग करने की अनुमति देता है, उदाहरण के रूप में।


3
उदाहरण के लिए, मैक ओएस एक्स से टार और जिप मेटाडाटा के बारे में जानते हैं कि जीएनयू संस्करण नहीं हैं।
lhf

1
Apple सप्लाई किए गए ऐप हैं, जो कुछ कमांड लाइन टूल के लिए सिर्फ GUI हैं और अगर आप उन्हें बदल देते हैं तो ऐप अजीब तरीके से व्यवहार करना शुरू कर सकते हैं, इसलिए जोड़ने के साथ जाएं, रिप्लेस नहीं करें।
56ark Ƭ

सही; Macports की तरह कुछ उन्हें जोड़ता है, यह उन्हें प्रतिस्थापित नहीं करता है।
जोनाथन

यदि आप MacPorts के साथ डिफ़ॉल्ट रूप से GNU उपयोगिताओं का उपयोग करना चाहते हैं तो आप /opt/local/libexec/gnubinअपने PATHपर्यावरण चर के सामने जोड़ सकते हैं ।
मार्कशीट

8

मैंने ऐसा करने के लिए एक स्क्रिप्ट लिखी है! स्क्रिप्ट को यहां (या नीचे) देखा जा सकता है । हालाँकि, मैं हमेशा गारंटी नहीं दे सकता कि यह पोस्ट पहले से जुड़ी स्क्रिप्ट के नवीनतम संस्करण को दर्शाएगी।

स्क्रिप्ट चलाने पर, Homebrew स्थापित किया जाएगा (यदि पहले से ही नहीं है), सभी संबंधित GNU उपयोगिताओं को स्थापित किया जाएगा (यदि पहले से नहीं है), और PATHचर को स्थापित उपयोगिताओं से बनाया जाएगा।

#!/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
क्या आप बिना किसी आलोचनात्मक टिप्पणी के केवल पतन को प्यार करते हैं? स्क्रिप्ट के लिए धन्यवाद।
जस्टिन फोर्स

@JustinForce कोई समस्या नहीं है! धन्यवाद प्रतिक्रिया देना के लिए।
क्ले फ्रीमैन

2
-1। यह स्क्रिप्ट बहुत अधिक जादू करती है। .bash_pathयदि आप @ user495470 और @ xuhdev के उत्तर का अनुसरण करते हैं, तो सभी -मंगलिंग वास्तव में आवश्यक नहीं हैं। और PS1 को बदलना इस सवाल के दायरे से पूरी तरह बाहर है।
ग्रेग डबकी

1
@GregDubicki दुर्भाग्य से, इन पैकेजों में से कुछ के लिए बैश पथ "मैनलिंग" आवश्यक है। आप अपने लिए यह जाँच कर सकते हैं। PS1 को बदलने के संबंध में: यह स्क्रिप्ट व्यक्तिगत उपयोग के लिए है। जो कोई भी इसे वापस करना चाहता है वह इतनी आसानी से कर सकता है।
क्ले फ्रीमैन

5

मैंने एक स्क्रिप्ट लिखी है जो पारदर्शी रूप से macOS CLI को एक ताज़ा GNU / Linux CLI अनुभव में बदल देती है

  • लापता GNU प्रोग्राम स्थापित करना
  • पुराने जीएनयू कार्यक्रमों को अद्यतन करना
  • पूर्व-स्थापित बीएसडी कार्यक्रमों को उनके पसंदीदा जीएनयू कार्यान्वयन के साथ बदलना
  • लोकप्रिय जीएनयू / लिनक्स वितरण के बीच अन्य कार्यक्रमों को आम स्थापित करना

https://github.com/fabiomaia/linuxify

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

यह आपको आसानी से सब कुछ पूर्ववत करने की भी अनुमति देता है।

./linuxify uninstall

1
पहले कमांड चलाने की कोशिश करना ( git clone git@github.com.:fabiomaia/linuxify.git) पहले यह कहा गया था "मेजबान 'github.com' की प्रामाणिकता स्थापित नहीं की जा सकती है"। मैंने टाइप किया yesऔर एंटर दबाया। फिर इसने कहा कि 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.गलत क्या है?
izogfif

@izogfif एचटीटीपीएस के साथ क्लोनिंग की कोशिश करेंgit clone https://github.com/fabiomaia/linuxify.git
फैबियोमा मारिया

1
हाँ, यह काम किया। कृपया, अपना उत्तर अपडेट करें (शुरुआत में उन डॉलर को भी हटा दें - वे कॉपी किए गए हैं जब पाठ का चयन करें और कंसोल में कॉपी-पेस्ट करें)।
izogfif

@izogfif सुझाव के लिए धन्यवाद।
फेबियोमिया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.