আমি আমার সার্ভারগুলির জন্য রক্ষণাবেক্ষণের প্রচুর স্ক্রিপ্ট তৈরি করে একটি বিশাল স্ক্রিপ্ট-কারখানা স্ক্রিপ্টে লিখছি।
এখন অবধি আমি কিছু লাইন লিখি যা 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 টি সার্ভার থাকে) কোড পছন্দ করে like
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 -u USERNAME
উপর যে পরিবর্তে, দেখতে আমি কিভাবে একটি স্ক্রিপ্ট ভিতরে একটি 'উবুন্টু' কম্যান্ড চালানো? ।
sudo
ব্যবহারকারীর নাম ছাড়াই একটি স্ক্রিপ্ট পাসওয়ার্ডের জন্য জিজ্ঞাসা করে, যদি না আপনি টাইপ না করেন তবে দেরি হয় না। এটি আরও খারাপ যদি আপনি কোনও টার্মিনালে স্ক্রিপ্টটি চালনা না করেন তবে আপনি পাসওয়ার্ড কোয়েরিও দেখতে পাবেন না এবং এটি কোনও কাজ করবে না। sudo -u
পদ্ধতির এই সমস্যার কোন নেই।
sudo
কোনও স্ক্রিপ্টের প্রয়োজন হয় আপনি এটি ভুল করছেন: পরিবর্তে পুরো স্ক্রিপ্টটি রুট হিসাবে চালান!