Se você quiser enviar a saída de vários comandos diferentes juntos em uma mensagem, não se preocupe com arquivos temporários, agrupe os comandos e simplesmente use um canal:
(
date
echo
for host in $HOSTS; do
echo "${host/*-} instance"
perl -e 'print "=" x 65,"\n"
lsuser -a login ALL | awk '/=true$/ { print $1 }' | grep -wvf /home/angela/unwanteduser.list
echo
done
) | mailx -r [email protected] -s "List of active Users and Locked users" [email protected]
A coisa (
.. )
executa o comando entre os colchetes em um processo de subshell separado, então toda a sua saída padrão pode ser canalizada.
A filtragem pode ser feita no ponto em que os dados estão sendo gerados, em vez de no final.
Se você estiver usando awk
, você pode deixar de fora a parte grep
do pipeline, pois awk
é perfeitamente capaz de selecionar quais linhas processar. Isso requer um processo a menos que seja mais eficiente.
Eu também acabei com a variável temp "title", usando a substituição patterm para me livrar do endereço IP (substitui *-
por nada).
Eu soletrei 65% dos caracteres=
, já que chamar o perl para isso leva a uma sobrecarga substancial. Você não notará muito a execução apenas deste script, mas se você adquirir o hábito e algum tempo escrever um script desse tipo que seja executado várias vezes por segundo, então irá notar a diferença.