Descubrí que una llamada al comando de correo hace que un script se suspenda sin errores. Para cerrar el script, tengo que presionar Ctrl-c o emitir un comando de eliminación en la identificación del proceso.
La sección pertinente del guión se encuentra a continuación:
EMAIL_TO="[email protected]"
if [ -f /www/archives/pdf/pdf_201207021048.tar ]; then
echo "file exists"
else
echo "file does not exist"
fi
echo "sending mail next..."
mail -s "pdfbackup" "$EMAIL_TO"
echo "mail sent?"
Al ejecutar esto, veo el texto "enviando correo a continuación..." y nada más. Nunca vuelve al mensaje.
Puedo ver que el script todavía está en la memoria con ps -ax | grep myscript.sh.
Intenté usar comillas en torno al asunto y al correo electrónico, y nuevamente sin ellas. Se produce el mismo resultado en ambos sentidos.
¿Qué estoy haciendo mal?
Respuesta1
El mail
programa espera que el usuario escriba el mensaje en su entrada estándar (terminada por EOF ( Ctrl-D)). No estás redirigiendo la entrada estándar, el programa está esperando entrada. Puedes redirigir desde /dev/null
(para un mensaje vacío), desde un archivo predefinido o desde una canalización, por ejemplo:
echo Hi, just sending you a message | mail -s "pdfbackup" "$EMAIL_TO"
o
mail -s "pdfbackup" "$EMAIL_TO" < /dev/null
Ambos deberían solucionar el problema.