मैं एक विशाल स्क्रिप्ट-फैक्ट्री स्क्रिप्ट पर लिख रहा हूं, जो मेरे सर्वर के लिए बहुत सारे रखरखाव स्क्रिप्ट का निर्माण कर रही है।
अब तक मैं कुछ पंक्तियाँ लिखता हूँ जो echo -ne
उदाहरण के साथ एक पंक्ति में लिखी जानी चाहिए
echo -n "if (( " | sudo tee -a /usr/local/bin/upgradeAllServers &> /dev/null
# Generate exitCode check for each Server
IFS=" "
COUNT=0
while read -r name ipAddr
do
if(($COUNT != 0))
then
echo -n " || " | sudo tee -a /usr/local/bin/upgradeAllServers &> /dev/null
fi
echo -n "(\$"$name"_E != 0 && \$"$name"_E != 1)" | sudo tee -a /usr/local/bin/upgradeAllServers &> /dev/null
COUNT=$((COUNT+1))
JOBSDONE=$((JOBSDONE+1))
updateProgress $JOBCOUNT $JOBSDONE
done <<< "$(sudo cat /root/.virtualMachines)"
echo " ))" | sudo tee -a /usr/local/bin/upgradeAllServers &> /dev/null
यह मुझे उत्पन्न करता है (यदि मेरी कॉन्फ़िगरेशन फ़ाइल में उदाहरण के लिए 2 सर्वर हैं) जैसे कोड
if (( ($server1_E != 0 && $server1_E != 1) || ($server2_E != 0 && $server2_E != 1) ))
अन्य सभी कोड ब्लॉक जिन्हें मुझे कोड के इनलाइन लेखन की आवश्यकता नहीं है, मैं हेरेडोक्स के साथ उत्पादन करता हूं क्योंकि मुझे उन्हें लिखने और बनाए रखने के लिए बेहतर तरीका मिलता है। जैसे ऊपरी कोड के बाद मेरे पास बाकी की तरह उत्पन्न होता है
cat << EOF | sudo tee -a /usr/local/bin/upgradeAllServers &> /dev/null
then
# Print out ExitCode legend
echo " ExitCode 42 - upgrade failed"
echo " ExitCode 43 - Upgrade failed"
echo " ExitCode 44 - Dist-Upgrade failed"
echo " ExitCode 45 - Autoremove failed"
echo ""
echo ""
fi
EOF
तो अंतिम कोड ब्लॉक जैसा दिखता है
if (( ($server1_E != 0 && $server1_E != 1) || ($server2_E != 0 && $server2_E != 1) ))
then
# Print out ExitCode legend
echo " ExitCode 42 - upgrade failed"
echo " ExitCode 43 - Upgrade failed"
echo " ExitCode 44 - Dist-Upgrade failed"
echo " ExitCode 45 - Autoremove failed"
echo ""
echo ""
fi
मेरा प्रश्न
क्या कोई तरीका है कि वंशानुगत व्यवहार echo -ne
बिना रेखा-चिन्ह के समान होता है?
sudo
उपयोगकर्ता नाम के बिना एक स्क्रिप्ट पासवर्ड के लिए पूछता है, जब तक कि आप इसे टाइप नहीं करते हैं इसमें देरी है। यह और भी बदतर है यदि आप एक टर्मिनल में स्क्रिप्ट नहीं चलाते हैं, तो आप पासवर्ड क्वेरी भी नहीं देख सकते हैं और यह सिर्फ काम नहीं करेगा। sudo -u
दृष्टिकोण इन समस्याओं के किसी भी जरूरत नहीं है।
sudo
एक स्क्रिप्ट की आवश्यकता है तो आप इसे गलत कर रहे हैं: इसके बजाय पूरे स्क्रिप्ट को रूट के रूप में चलाएं!