किसी फ़ाइल में एक पंक्ति को कैसे जोड़ा जाए जिसमें केवल रूट राइट की अनुमति हो और स्क्रिप्ट का निष्पादन जारी रखने के लिए


9

मैं बैश स्क्रिप्टिंग सीखने की कोशिश कर रहा हूं। मैं एक व्यावहारिक समस्या पर काम कर रहा हूं और एक बिंदु पर मुझे एक फाइल में एक पंक्ति जोड़ने की आवश्यकता है जिसे rootलिखने के लिए अनुमति की आवश्यकता है ।

कोड इस तरह दिखता है:

# some code
echo "add this line to the code" >> fileName
# some code

क्या किसी तरह से स्क्रिप्ट को रूट पासवर्ड के लिए पूछना संभव है, पासवर्ड को मान्य करें, और सफल प्रमाणीकरण पर फ़ाइल को संशोधित करें? स्क्रिप्ट को फिर उपयोगकर्ता मोड पर लौटना चाहिए और कमांड निष्पादन जारी रखना चाहिए।

जवाबों:


13

sudoमैन पेज में एक टिप है जो बताता है कि इस तरह से कुछ कैसे करना है। यहाँ मेरा एक-लाइनर है:

#!/usr/bin/bash
sudo sh -c "echo \"add this line to the code\" >> fileName"

जाहिर है, आपको सबसे पहले अपने उपयोगकर्ता को sudoविशेषाधिकार देने होंगे। shखोल जड़ के स्वामित्व वाली फाइल करने के लिए अनुप्रेषण के कारण किया जाता है। मुझे echoकमांड के लिए उपयोग किए गए उद्धरणों से भी बचना था ।


2

su अधिकांश यूनिक्स प्रणालियों पर उपलब्ध है और काम करना चाहिए:

su root -c 'echo "add this line to the code" >> fileName'

इसके विपरीत sudo, पासवर्ड के साथ कैश नहीं लगता है su
रेन एवरेट

@ रेन एवरेट: मैं सुडो से परिचित नहीं हूं। लेकिन 'सु' का व्यवहार वास्तव में ओपी की पटकथा के अनुसार है। अधिकांश समय मैं दूसरे तरीके से 'सु' का उपयोग करता हूं: रूट से दूसरे उपयोगकर्ता में बदल रहा हूं। इस मामले में किसी भी पासवर्ड की जरूरत नहीं है।
चमत्कार १ Mar३

1

आप के teeसाथ उपयोग कर सकते हैं sudo:

echo "add this line to the code" | sudo tee -a filename > /dev/null

echoका उत्पादन |( पाइप ) के साथ पुनर्निर्देशित किया जाता है sudo teeमानक इनपुटtee से पढ़ता है और इस मामले में, किसी भी फ़ाइल को मानक आउटपुट पर लिखता है । (या ) फाइलों को अपेंड करता है, इसके बिना फाइलें ओवरराइट हो जाती हैं। जैसा कि इसके साथ चलाया जाता है यह रूट-अनुमतियों के साथ फाइल खोलता है। अंत में, मानक आउटपुट के आउटपुट को दबा देता है ।filename-a--appendteeteesudo> /dev/nulltee

का उपयोग करने का एक लाभ यह teeबजाय सिर्फ पूरे आदेश शुरू करने के साथ पुनर्निर्देशन सहित su -cया sudo sh -cहै, तो आप की जरूरत नहीं है कि किसी भी तरह से प्रारंभिक आदेश के हवाले से (पहले से ही उद्धरण युक्त समय काफी बदसूरत प्राप्त कर सकते हैं लाइनों का हवाला देते हुए) बदलने के लिए।


0

यह कोशिश करें यह कमांड यूनिक्स और लिनक्स पर उपलब्ध है।

sudo sh -c "echo 'add this line to the code' >> fileName"


-2

चाल करेंगे:

ssh host "sudo su root -c 'echo "add this line to the code" >> /etc/hosts'"

क्यों ssh? आप की जरूरत नहीं है suके साथ sudoऔर न आपके द्वारा निर्दिष्ट करने की आवश्यकता है rootके रूप में यह डिफ़ॉल्ट है। सब सब में, थोड़ा और स्पष्टीकरण अच्छा होगा क्योंकि ओपी कुछ सीखना चाहता था और न केवल एक समस्या हल की गई थी।
आदेपन

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