Como criar um comando para me enviar uma mensagem de texto se falhou ou passou?

0

Estou tentando criar um comando que me enviará uma mensagem de texto, aprovada ou reprovada.

Até agora, meu comando é assim:

command && echo OK || echo Failed | echo ' 'at 'date | sendmail [email protected]

Assim, quando o texto passar, eu gostaria que ele me enviasse um texto (enviando-me um e-mail) e o texto deveria ser o seguinte:

OK at March 2 2:37pm

e quando o teste falhar, deve enviar um texto para mim:

Failed at March 2 2:37pm.

Não sei como concatenar as saídas echo corretamente e espero que alguém saiba onde está meu problema. O shell é tcsh .

EDITAR:

Para algo como 'ls' eu quero os diretórios listados no terminal, mas eu quero que o "Ok" ou "fail" vá para a parte do 'sendmail'. Então todos os comandos devem imprimir no terminal como de costume, mas envie a parte 'falhada' ou 'ok' para a parte do sendmail.

    
por Veridian 28.03.2017 / 23:38

1 resposta

0

Comentário do OP:

For something like ls I want the directories listed in the terminal, but I want the "Ok" or "fail" to go to the sendmail part.

Eu não posso fazer isso em tcsh . Isso deve funcionar em bash :

your_command ; { [ $? -eq 0 ] && echo -n OK || echo -n Failed ; echo " at 'date'" ; } | …

Espero que alguém o leve daqui, coloque a linha acima em tcsh e escreva uma resposta melhor.

O melhor que posso pensar é um script bash , se você tiver apenas bash na máquina. O ponto é que você pode executar um script desse tipo a partir de tcsh . Este é um script rápido e sujo:

#!/bin/bash
"$@"
{ [ $? -eq 0 ] && echo -n OK || echo -n Failed ; echo " at 'date'" ; } | sendmail [email protected]

Modifique o shebang se você precisar. Salve esse trecho de código em um arquivo (por exemplo, sendstatus.sh ), torne-o executável com chmod e use-o da seguinte forma:

./sendstatus.sh your_command
./sendstatus.sh your_command --with option -s
./sendstatus.sh ls
./sendstatus.sh ls -sl

As correções:

  • echo -n faz com que o próximo echo continue na mesma linha;
  • o último echo não leu do canal porque não fazia sentido;
  • date está dentro de 'marks (substituição de comando);
  • Os comandos
  • são agrupados por delimitadores {} , portanto, sua saída é passada para o% final| no total.
por 29.03.2017 / 00:43