Я пишу на величезному сценарії фабрики сценаріїв, що генерує багато сценаріїв обслуговування для моїх серверів.
До цих пір я пишу деякі рядки, які потрібно записати в один рядок, 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) ))
Усі інші кодові блоки, які не потребують цього вбудованого написання коду, який я створюю за допомогою heredocs, оскільки я вважаю їх кращим для написання та підтримки. Наприклад, після верхнього коду, у мене залишилося інше
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без імені користувача запитує пароль, якщо ви не введете його там, де затримка. Ще гірше, якщо ви не запустите скрипт у терміналі, тоді ви навіть не можете побачити запит пароля, і він просто не спрацює. У sudo -uпідходу немає жодної з цих проблем.
sudoсценарій, ви робите це неправильно: замість цього запустіть увесь сценарій як root!