Descubrí que una llamada al comando de correo está causando que un script se suspenda sin error. Para cerrar la secuencia de comandos, tengo que pulsar 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 indicador.
Puedo ver que el script todavía está en la memoria con ps -ax | grep myscript.sh.
Intenté usar comillas alrededor del asunto y el correo electrónico, y nuevamente sin ellas. Se produce el mismo resultado de cualquier manera.
¿Qué estoy haciendo mal?
Respuesta aceptada:
El mail
programa espera que el usuario escriba el mensaje en su entrada estándar (terminado por EOF (Ctrl-D )). No está redirigiendo la entrada estándar, el programa está esperando una entrada. Puede redirigir desde /dev/null
(para un mensaje vacío), desde un archivo enlatado 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.