¿Cómo pasar un CTRL-D a una línea de command dentro de un script?

Estoy usando esta línea

( cat bodyText.txt; uuencode backup.tar ) | mail -s "backup" myEmail@myserver.com 

dentro de un script bash que será activado por cron.

Esta línea es casi perfecta, pero se cuelga esperando a que se escriba CtrlD , por lo que el post y el adjunto podrían enviarse.

¿Cómo incluyo una CtrlD dentro de un script bash para hacer que esta línea funcione?

Solutions Collecting From Web of "¿Cómo pasar un CTRL-D a una línea de command dentro de un script?"

  • el uuencode es: uuencode name <sourcefile

  • tal vez solo necesite una línea vacía final: agregar ; echo -e "\n\n" ; ; echo -e "\n\n" ; antes del paréntesis de cierre, y vuelve a intentarlo?

Entonces en tu caso:

 ( cat bodyText.txt; uuencode backup.tar < backup.tar ; echo -e "\n\n" ; ) | mail -s "backup" myEmail@myserver.com 

Otra forma es usar mutt que maneja mejor los files adjuntos, y conoce los types de mimo, etc.

 mutt -s "the subject" -a backup.tar -- myEmail@myserver.com < bodyText.txt 

Como han dicho otros, Control-D es cómo le dices al shell que envíe el final del file. Los processs que leen de las secuencias deben get el final del file cuando la secuencia se cierra.

Pero parece que estás tratando de implementar algo que ya existe en forma más completa. Podría tener razones para eso, por supuesto, pero si está interesado en soluciones existentes, mpack / munpack son progtwigs de línea de command que mime codifican files y los envían por correo. Puede leer la página de manual para ver si hace lo que quiere.

Utilice el modo detallado (-v) para evitar ctrl + d

 echo -e 'Mail body'| mail -v -s 'Mail Subject' my@email.com 

Quieres decir:

 uuencode backup.tar < bodyText.txt | mail -s "backup" myEmail@myserver.com