OS X के शेल कमांड को लिनक्स संस्करणों के साथ बदलें?


32

ओएस एक्स में टर्मिनल में डिफ़ॉल्ट रूप से उपलब्ध कमांड, उनके लिनक्स संस्करणों की तरह व्यवहार नहीं करते हैं। मैं उन सभी को वास्तविक GNU लिनक्स कमांड के साथ कैसे बदल सकता हूं?

उदाहरण के लिए, sed -i को एक कष्टप्रद अतिरिक्त "" तर्क की आवश्यकता होती है। इसके अलावा, यह केवल पाठ फ़ाइलों के साथ काम करता है। यह बेकार है।


1
उम्म ... सेड एक "टेक्स्ट एडिटर" है, यह बाइनरी फाइलों को भी संशोधित कर सकता है। आप इसे और क्या करना चाहेंगे? कृपया बताएं कि आपको वास्तव में क्या चाहिए। मैं आपकी समस्या को नहीं समझ सकता, क्या आप कुछ और उदाहरण दे सकते हैं?
टेराडन

3
दरअसल, sed एक स्ट्रीम एडिटर है । पांडित्य नहीं है, लेकिन यह वास्तव में फ़ाइलों को संशोधित करने के लिए नहीं है, जब तक कि वे फाइलें स्ट्रीम नहीं होती हैं। यही कारण है कि -iझंडा गैर-मानक हैedफ़ाइलों के संपादन के लिए है।
कोजिरो

जवाबों:


43

सामान्य स्थिति में, आप डिफ़ॉल्ट कमांड्स को बिल्कुल नहीं बदल सकते (या नहीं )। कारण यह है कि कई सिस्टम एडमिनिस्ट्रेशन स्क्रिप्ट और थर्ड-पार्टी पैकेज शायद इन कमांडों पर भरोसा करते हैं कि वे ओएस एक्स के बॉक्स से बाहर निकलने के तरीके का व्यवहार करते हैं।

इसलिए यदि आप सिस्टम कमांड को मिटा देते हैं और उन्हें GNU समकक्षों के साथ बदल देते हैं जिसमें असंगत व्यवहार या कमांड लाइन तर्क होते हैं, तो यह संभवतः कुछ तोड़ देगा। विशेष रूप से यदि आप मूल रूप से लिनक्स या बीएसडी पर चलने के लिए डिज़ाइन किए जाने के बाद मैक ओएस एक्स के लिए "पोर्ट किए गए" कुछ सॉफ़्टवेयर का उपयोग करते हैं, क्योंकि इन प्रकार के कार्यक्रमों में ओएस एक्स एपीआई को कॉल करने के विपरीत शेल स्क्रिप्ट और सिस्टम कमांड पर भरोसा करने की अधिक संभावना है।

आप जो कुछ भी कर सकते हैं वह एक ऐसा वातावरण स्थापित करता है जो GNU उपयोगिताओं को डिफॉल्ट्स को ओवरराइट किए बिना किसी अन्य निर्देशिका में स्थापित करता है, और फिर अपने PATHपर्यावरण चर को समायोजित करता है ताकि यह सिस्टम निर्देशिकाओं को खोजने से पहले GNU निर्देशिका के भीतर पाए जाने वाले कमांड को प्राथमिकता दे। आप इसे तार कर सकते हैं ताकि यह केवल आपके पेट को सेट करे अगर आप एक इंटरैक्टिव शेल शुरू कर रहे हैं; आप कैसे साथ ऐसा करने की गूगल कर सकते हैं bash(इसके लिए खोज है, क्योंकि यह शायद पहले पूछे जा रहा है या) यदि आप ऐसा करना चाहते हैं या SU पर एक और सवाल पूछते हैं।

इस तरह के वातावरण का एक उदाहरण होमब्रे है जो उदाहरण के लिए sedअन्य चीजों के बीच जीएनयू है । होमब्रेव स्थापित करने के बाद, आप टाइप कर सकते हैं

brew install coreutils

और GNU Coreutils स्थापित करें । इन के साथ प्रदान करेगा sed, date, printf, wcऔर कहा कि जीएनयू / लिनक्स, लेकिन नहीं ओएस एक्स हालांकि साथ जहाज, "ओवरराइड" डिफ़ॉल्ट ओएस एक्स binaries के लिए इतनी के रूप में नहीं कई अन्य उपकरण, वे के साथ उपसर्ग किया जाएगा gडिफ़ॉल्ट रूप से। इसलिए, Coreutils स्थापित करने के बाद, यदि आप GNU sed का उपयोग करना चाहते हैं, तो टाइप करें

gsed

यदि यह हर बार टाइप करने के लिए बहुत अधिक परेशानी है, तो आप अपने पेटीएम में "gnubin" डायरेक्टरी जोड़ सकते हैं और बस GNU sed के साथ कॉल कर सकते हैं sed। आपको निम्नलिखित को अपने साथ जोड़ना होगा ~/.bash_profile:

PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"

बेशक, आप पागल (कर्नेल, X11, syscall संगतता, आदि) के लिए सूप से एक लिनक्स वातावरण की जरूरत है अगर आप इस तरह के रूप में एक आभासी मशीन, में लिनक्स चलाना होगा VirtualBox । यह एक सुरक्षित शर्त है यदि आपको सॉफ़्टवेयर या स्क्रिप्ट चलाने की आवश्यकता है जो लिनक्स पर चलाने के लिए डिज़ाइन की गई हैं।

होमब्रेव आपको केवल उन कार्यक्रमों के कुछ वर्गों के लिए अनुकूलता प्रदान करेगा जिनके लिए लिनक्स-विशिष्ट व्यवहार की आवश्यकता नहीं है। उदाहरण के लिए inotifyकेवल लिनक्स पर उपलब्ध है। drm(डायरेक्ट रेंडरिंग मैनेजर) केवल लिनक्स पर उपलब्ध है। कुछ अन्य नहीं बल्कि निम्न-स्तरीय सिस्टम कॉल हैं जो केवल लिनक्स पर उपलब्ध हैं, और जिसके लिए ओएस एक्स पर कोई समकक्ष मौजूद नहीं है, इसलिए लिनक्स से ओएस एक्स तक कुछ कार्यक्रमों को पोर्ट करना महत्वपूर्ण कोड परिवर्तनों के बिना अव्यवहारिक या असंभव हो सकता है।


वहाँ हमेशा बूट शिविर है । :)
कोजिरो

13
जो भी कारण के लिए brew install coreutilsशामिल नहीं है sed। आप brew install gnu-sedइसे स्थापित कर सकते हैं gsedऔर नहीं sed, भले ही आप अपना अपडेट करें $PATH। मैंने मैक को छिपाने के लिए एक सिमिलिंक बनाया है sed: ln -s $(which gsed) $(brew --prefix coreutils)/libexec/gnubin/sedहालाँकि आपको अभी भी man gsedसही मैनपेज को देखना है।
dimo414

6
brew install gnu-sed --default-namesइसे स्थापित करेगाsed
ivotron

1
इसके बजाय --default-names, आप जी-प्रीफ़िक्स किए गए आदेशों के साथ इंस्टॉल कर सकते हैं और फिर ओह-माय-ज़श (अत्यधिक अनुशंसित) स्थापित कर सकते हैं और प्लगइन को सक्षम कर सकते हैं ग्नू-बर्तन।
bibstha

3

आप एक Gentoo उपसर्ग का उपयोग कर सकते हैं जो OS X का समर्थन करता है, आप इसे बूटस्ट्रैप करके कर सकते हैं और फिर उपसर्ग निर्देशिका में संबंधित पथ को अपने पथ में जोड़ सकते हैं। हो सकता है कि यह आपके लिए पहले से ही ऐसा कर रहा हो। आपके द्वारा किया जाने के बाद आप संकुल को स्थापित करने के लिए मानक जेंटू कमांड का उपयोग कर सकते हैं।

emerge coreutils उदाहरण के लिए, आपको मानक GNU के बर्तन मिलेंगे।

कृपया ध्यान दें कि Gentoo डिफ़ॉल्ट रूप से संकलित करता है, आप इसके बजाय एक बाइनरी होस्ट सेट करना चाह सकते हैं । यह सिर्फ उस लेख की दूसरी छमाही के किसी यूआरएल से उपयोग कर, और में रखने से है PORTAGE_BINHOST="... your url here ..."में ./etc/make.confअपने उपसर्ग में।


1

@ Allquixotic के पोस्ट के अनुसरण के अनुसार, यहाँ प्रति आधिकारिक निर्देश हैं brew install coreutils

सभी कमांड उपसर्ग 'जी' के साथ स्थापित किए गए हैं।

यदि आपको वास्तव में इन आदेशों का उपयोग करने की आवश्यकता है तो उनके सामान्य नाम के साथ अपने पाथ से "gnubin" निर्देशिका जोड़ सकते हैं

PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"

इसके अतिरिक्त, आप उनके मैन पेजों को सामान्य नामों के साथ "gnuman" डायरेक्टरी को अपने मैनपाट में अपने बैशलाइट से भी एक्सेस कर सकते हैं

MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"

0

sedआप के संबंध में Rudixपरियोजना से एक precompiled बाइनरी डाउनलोड कर सकते हैं । आगे के Rudixपैकेज के लिए यहां और यहां देखें ।

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