Como passar uma CTRL-D para uma linha de comando dentro de um script?

7

Estou usando esta linha

 ( cat bodyText.txt; uuencode backup.tar ) | mail -s "backup" [email protected]

dentro de um script bash que será disparado pelo cron.

Esta linha é quase perfeita, mas é interrompida esperando que Ctrl - D seja digitado, para que a mensagem e o anexo possam ser enviados.

Como eu incluo uma Ctrl - D dentro de um script bash para fazer essa linha funcionar?

    
por SpaceDog 10.01.2013 / 12:53

4 respostas

4
  • o uuencode é: nome do uuencode < sourcefile

  • talvez seja necessário apenas uma linha final vazia: adicione ; echo -e "\n\n" ; antes do parêntese de fechamento e tente novamente? -

Então, no seu caso:

( cat bodyText.txt; uuencode backup.tar < backup.tar ; echo -e "\n\n" ; ) | mail -s "backup" [email protected]

Outra maneira é usar mutt , que lida melhor com anexos e sabe sobre os tipos MIME, etc:

mutt -s "the subject" -a backup.tar -- [email protected] < bodyText.txt
    
por 10.01.2013 / 13:32
0

Como outros já disseram, Control-D é como você diz ao shell para enviar o final do arquivo. Os processos de leitura dos fluxos devem receber o final do arquivo quando o fluxo for fechado.

Mas parece que você está tentando implementar algo que já existe de uma forma mais completa. Você pode ter razões para isso, é claro, mas se você estiver interessado em soluções existentes, mpack / munpack são programas de linha de comando que codificam arquivos e enviam por email. Você pode ler a página de manual para ver se ela faz o que você quer.

    
por 10.01.2013 / 14:42
-1

Você quer dizer:

uuencode backup.tar < bodyText.txt | mail -s "backup" [email protected]
    
por 10.01.2013 / 13:37
-1

Use o modo detalhado (-v) para evitar ctrl + d

echo -e 'Mail body'| mail -v -s 'Mail Subject' [email protected]
    
por 23.07.2014 / 12:36

Tags