Sto scrivendo un enorme script di script-factory che genera molti script di manutenzione per i miei server.
Fino ad ora scrivo alcune righe che devono essere scritte in una riga con echo -ne
es
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
questo mi genera (se ci sono ad esempio 2 server nel mio file di configurazione) come
if (( ($server1_E != 0 && $server1_E != 1) || ($server2_E != 0 && $server2_E != 1) ))
Tutti gli altri blocchi di codice che non necessitano di questa scrittura in linea del codice che produco con heredocs poiché li trovo molto meglio da scrivere e mantenere. Ad esempio dopo il codice superiore ho il resto generato come
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
Quindi appare il blocco di codice finale
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
La mia domanda
Esiste un modo in cui un heredoc si comporta in modo simile echo -ne
senza il simbolo di fine riga?
sudo -u USERNAME
su quello invece, vedi Come posso eseguire un comando 'sudo' all'interno di uno script? .
sudo
senza nome utente richiede la password, a meno che tu non l'abbia digitata c'è un ritardo. È ancora peggio se non si esegue lo script in un terminale, quindi non è nemmeno possibile visualizzare la query della password e non funzionerà. L' sudo -u
approccio non ha nessuno di questi problemi.
sudo
di uno script, stai sbagliando: esegui invece l'intero script come root!