El script de Shell se bloquea en el comando de correo

El script de Shell se bloquea en el comando de correo

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 mailprograma 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.

información relacionada