Evitar script bash esperando por usuário digitar a tecla Enter

1

Eu tenho a seguinte entrada em um script bash:

 echo "Please see attached file" | mailx -S smtp=$smtpServer -s "Subject of the mail" -a $logfile -r "[email protected]" [email protected] [email protected]

Está funcionando bem se não houver erro no envio de mensagens, mas se houver um erro, o mailx mostrará a mensagem de erro e aguardará que o usuário pressione a tecla enter. Como posso evitar isso? Não deve esperar que o usuário pressione a tecla enter.

    
por Koottalida 14.07.2017 / 14:45

3 respostas

2

Você normalmente tentaria usar as opções do aplicativo para o modo não interativo ou suprimir erros para isso. Eu não encontrei nenhum explícito para mailx após o skim rápido dos documentos, no entanto.

Uma abordagem mais geral de fazer isso seria usar o comando timeout para isso, que executa o comando especificado e o mata se ainda estiver em execução após o tempo limite especificado.

Por exemplo, no seu caso, o comando seria:

echo "Mail body" | timeout 15s mailx ${MAILX_OPTIONS}

Este comando irá matar mailx se ele ainda estiver rodando após 15 segundos, o que deve acontecer apenas no caso de uma mensagem de erro persistente.

    
por 14.07.2017 / 15:14
1

Na categoria gross-hack de soluções, envie um retorno de carro gratuito, que estará lá se necessário, e jogado fora, se não:

{ echo "Please see attached file"; echo; } | mailx ...
    
por 14.07.2017 / 18:03
-1

Você pode executar o comando em um shell esperar , que assistirá a você para procurar prompts e enviar informação em resposta.

#!/usr/bin/expect
spawn COMMAND
expect "PROMPT"
send "RESPONSE\n";
interact
    
por 14.07.2017 / 15:08