निष्पादन के बिना फाइल करने के लिए बैश की एक पंक्ति कैसे गूंजें?


0

मैं वर्तमान में किसी अन्य बैश स्क्रिप्ट के भीतर से एक बैश स्क्रिप्ट लिखने का प्रयास कर रहा हूं। मैं निम्नलिखित कार्य करता हूं:

touch /home/file.sh
echo "#!/bin/bash" >> /home/file.sh
echo "for line in $(grep -o 'guest-......' /etc/passwd | sort -u); do sudo deluser $line; done >> /home/file.sh

समस्या यह है कि प्रतिध्वनि न केवल फाइल करने के लिए लिखती है, बल्कि लूप के भाग को निष्पादित करती है। तो फ़ाइल सामग्री कुछ निम्न की तरह हो जाती है।

#!/bin/bash
for line in guest-rbrars; do sudo deluser ; done

के बजाय:

#!/bin/bash
for line in $(grep -o 'guest-......' /etc/passwd | sort -u); do sudo deluser $line; done >> /var/log/cron 2>&1

मुझे उस हिस्से को निष्पादित किए बिना एक फ़ाइल के लिए लूप के लिए धक्का कैसे मिलता है?

धन्यवाद!

सादर

जवाबों:


1

आपको सभी विशेष प्रतीकों से बचने की आवश्यकता है। $क्योंकि यह एक चर नाम, या कोष्ठकों के अंदर एक कोड ब्लॉक का प्रतिनिधित्व प्रतीक खास है। इसलिए यदि आप इसे चलाते हैं, तो bash इसे स्क्रिप्ट में सबसे पहले चलाने की कोशिश करेगा जिसमें लेखन कोड होता है और फिर अपनी फ़ाइल में परिणाम लिखें ( /home/file.sh)।

एक प्रतीक से बचने के लिए, \प्रतीक का उपयोग करें । उदाहरण के लिए:

echo "for line in \$(grep -o 'guest-......' /etc/passwd | sort -u); do sudo deluser \$line; done" >> /home/file.sh
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.