नया सॉफ़्टवेयर स्थापित करने से पहले इको का उपयोग क्यों करें?


25

मैं कंप्यूटिंग की दुनिया में नया हूं। ROS इंडिगो स्थापित करते समय, पहला चरण मुझे निम्नलिखित कोड का उपयोग करने का निर्देश देता है:

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

हम इस संदर्भ में echoकमांड का उपयोग क्यों करते हैं sh -c? मैंने अन्य संस्थापन प्रक्रियाओं में इको कमांड के उपयोग को भी देखा है।

नोट - sh कमांड का उपयोग , ROS इंडिगो इंस्टालेशन विकी


जवाबों:


43

आमतौर पर echoकमांड का कार्य कंसोल पर एक स्ट्रिंग (पाठ का टुकड़ा) प्रदर्शित करना है। लेकिन इस बार, एक कमांड >को echoकमांड के बाद जोड़ा जाता है , इसके आउटपुट को टेक्स्ट फाइल पर रीडायरेक्ट करता है /etc/apt/sources.list.d/ros-latest.list

तो मूल रूप से, यह पूरा कमांड टेक्स्ट फाइल पर एक पाठ लिखता है। अब, यहाँ मुश्किल हिस्सा आता है:

फ़ाइल के लिए लिखी गई स्ट्रिंग प्रत्येक कंप्यूटर के लिए भिन्न हो सकती है। $(lsb_release -sc)जब echoआदेश चलता है तो हिस्सा हल हो जाता है (कुछ और में बदल जाता है) ।

आप /etc/apt/sources.list.d/ros-latest.listअपने लिए परिवर्तन देखने के लिए कमांड से पहले और बाद में एक टेक्स्ट एडिटर में खोल सकते हैं । (इस आदेश से पहले फ़ाइल मौजूद नहीं हो सकती है।)


19
वास्तव में, >टेक्स्ट फ़ाइल को ओवरराइट करता है, >>अंत में जोड़ता है।
दिनांक

3
@dirkt साभार मेरी गलती! ;) यह कई पटकथा भाषा सीखने का परिणाम है। परस्पर विरोधी व्यवहार अंततः आपको परेशान करने के लिए आते हैं। डॉस में भी,> ओवरराइट करता है।

10
echoमानक आउटपुट को लिखता है, कंसोल को नहीं।
माइकल हैम्पटन

4
"जब तक पुनर्निर्देशित नहीं किया जाता है, मानक आउटपुट पाठ टर्मिनल है जिसने कार्यक्रम शुरू किया है।" तो, हाँ, echoकंसोल को लिखता है।

2

पैकेज प्रबंधन और सॉफ्टवेयर रिपोजिटरी

डेबियन आधारित लिनक्स वितरण ऑपरेटिंग सिस्टम को अपडेट रखने के लिए और नए सॉफ्टवेयर पैकेजों को आसानी से लाने और स्थापित करने के लिए रिपॉजिटरी (एप्लिकेशन इंस्टॉलेशन पैकेज और अपग्रेड पैकेज के डेटाबेस) पर भरोसा करते हैं। इन रिपॉजिटरी के स्थान को /etc/apt/sources.listअतिरिक्त स्रोतों में संग्रहीत किया जाता है , हालांकि आमतौर पर विशिष्ट अनुप्रयोगों के लिए अद्वितीय को /etc/apt/sources.list.dनिर्देशिका में संग्रहीत किया जा सकता है ।

जब पैकेज इंडेक्स अपडेट कमांड apt-get updateनिष्पादित किया जाता है, तो आपका ऑपरेटिंग सिस्टम उपलब्ध पैकेजों के लिए इन पैकेज रिपॉजिटरी के साथ जांच करता है और उपलब्ध सॉफ्टवेयर्स को आपके ऑपरेटिंग सिस्टम के लिए उपलब्ध कराता है, जिसे आप पारंपरिक apt-get install <package>कमांड का उपयोग करके इंस्टॉल कर सकते हैं ।

इन सॉफ्टवेयर स्रोतों में से एक का उदाहरण है:

deb http://us-west-2.ec2.archive.ubuntu.com/ubuntu/ trusty main restricted

इन स्रोतों के लिए लिनक्स वितरण के विशिष्ट संस्करणों को संदर्भित करना महत्वपूर्ण है। एक उदाहरण भरोसेमंद है जो Ubuntu 14.04 के लिए कोडनाम है। आप अपने OS (डेबियन बेस्ड) को पूर्ण विवरण के लिए lsb_release -aया lsb_release -scजिसका अर्थ संक्षिप्त और कोडनेम है, के लिए क्वेरी कर सकते हैं ।

आपके प्रश्न में, भाग $(lsb_release -sc)की व्याख्या की गई है और आपके ऑपरेटिंग सिस्टम के परिणाम को कस्टम स्रोत फ़ाइल ros-latest.list में मुद्रित किया गया है जो कमांड निष्पादन पर बनाएगी।


कमांड भाषा दुभाषिया

shआदेश है बॉर्न शैल । यह एक है, कई गोले के बीच लेकिन पुराने मानक माना जाता है और आम तौर पर एक आप कुछ अस्तित्व में हो सकता है। bashकई शेल स्क्रिप्ट में देखना भी आम है । यह घोषणा शेल को उपयोग करने के लिए निर्दिष्ट कर रही है क्योंकि विभिन्न शेल विभिन्न सिंटैक्स का उपयोग करते हैं।

-cझंडे का संबंध है , उद्धृत करते हुए man bash:

-C विकल्प मौजूद है, तो स्ट्रिंग से कमांड पढ़े जाते हैं। यदि स्ट्रिंग के बाद तर्क हैं, तो उन्हें $ 0 से शुरू करके, स्थितीय मापदंडों को सौंपा गया है।

सब कुछ ''एक स्ट्रिंग के रूप में पढ़ा जाता है, आपको यह पता लगाने की आवश्यकता नहीं होगी कि विभिन्न उद्धरण चिह्नों से कैसे बचा जाए या शेल की गलत तरीके से व्याख्या करने के बारे में चिंता करें।


tl; डॉ

कमांड deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) mainकस्टम स्रोत फ़ाइल में प्रिंट करता है, $(lsb_release -sc)व्याख्या किए गए मान के साथ।

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