Supondo que você deseja obter "mydomain" se tiver algum destes: "mydomain.com", "www.mydomain.com", "mail.secure.mydomain.com", ...
get_domain_name() {
local IFS=.
set -- $1
local n=$(($# - 1))
echo ${!n}
}
get_domain foo.bar.baz.qux
baz
A maneira correta de verificar os resultados da sua função sendmail
é com muito menos sintaxe:
if sendmail
then echo OK
else echo uh oh
fi
if
verifica o status de saída de um comando. Observe que [[
é um comando embutido bash (que requer que seu último argumento seja ]]
) - em um prompt bash, digite help [[ if
Na sua função sendmail
, você usa cat << 'EOF'
- que efetivamente escolhe aspas inteiras do aqui-doc. Quaisquer variáveis não serão substituídas.
Você parece querer contatenar o heredoc, depois stdin, depois um arquivo nomeado, e depois canalizar tudo isso para o sendmail. Você precisará de um pouco mais de sintaxe para isso: use as chaves { grouping }
para concatenar as informações e depois canalize o resultado para o sendmail
sendMail() {
{
cat <<- HEADERS
To: [email protected]
From: Enterprise
Reply-to: [email protected]
Subject: [DB Info] for $NEW_DOMAIN_NAME on enterprise.exsite.co
Content-Type: text/html
HEADERS
cat -
cat /usr/bin/games/dbLog.txt
} | /usr/sbin/sendmail -t && echo "STATUS: Mail sent!"
}
Note aqui que usei um heredoc com <<-
para permitir o uso das guias iniciais para recuar o documento. O bash é estrito sobre apenas os separadores principais, não os espaços, por isso tenha cuidado com isso.
Você está ciente de que printf
não acrescenta uma nova linha à string produzida? Todas as suas mensagens serão agrupadas em uma linha.