Sunucularım için bakım komut dosyaları üreten büyük bir komut dosyası fabrika komut dosyası yazıyorum.
Şimdiye kadar, echo -neörneğin bir satırda yazılması gereken bazı satırlar yazıyorum.
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
bu beni (yapılandırma dosyamda 2 sunucu varsa) gibi kod üretir
if (( ($server1_E != 0 && $server1_E != 1) || ($server2_E != 0 && $server2_E != 1) ))
Yazma ve bakım için daha iyi bir yol bulduğumdan, yorumlu metinlerle ürettiğim bu satır içi kod yazımına ihtiyaç duymayan diğer tüm kod blokları. Örneğin, üst koddan sonra geri kalanı gibi oluşturulur
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
Son kod bloğu şöyle görünüyor
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
Benim
sorum Bir yorumcu echo -nesatır sonu sembolü olmadan benzer davranmanın bir yolu var mı ?
sudo -u USERNAMEile ilgili olduğunu bunun yerine, bkz ben bir senaryo içinde bir 'sudo' komutunu nasıl çalıştırabilirim? .
sudoKullanıcı adı olmayan bir komut dosyası , şifreyi girmediğiniz sürece, sizden bir gecikme olmaz. Senaryoyu bir terminalde çalıştırmazsanız daha da kötüdür, o zaman şifre sorgusunu bile göremezsiniz ve sadece işe yaramaz. sudo -uYaklaşım bu sorunların hiçbirine sahip değildir.
sudoBir betiğe ihtiyacınız varsa yanlış yapıyorsunuz: Bunun yerine betiğin tamamını root olarak çalıştırın!