Как создать команду, чтобы отправить мне текстовое сообщение о том, не удалось или не прошло?

372
Veridian

Я пытаюсь создать команду, которая отправит мне текстовое сообщение, независимо от того, прошло оно или нет.

Пока что моя команда выглядит так:

command && echo OK || echo Failed | echo ' 'at `date | sendmail 5556667777@vtext.com 

Поэтому, когда текст проходит, я хотел бы, чтобы он отправил мне текст (отправив мне электронное письмо), и текст должен выглядеть следующим образом:

Хорошо, 2 марта 14:37

и когда тест не пройден, он должен написать мне это:

Не удалось 2 марта 14:37.

Я не уверен, как правильно объединить echoрезультаты, и я надеюсь, что кто-то знает, где моя проблема. Оболочка есть tcsh.

РЕДАКТИРОВАТЬ:

Для чего-то вроде 'ls' я хочу, чтобы каталоги были перечислены в терминале, но я хочу, чтобы "Ok" или "fail" переходили к части "sendmail". Поэтому все команды должны печататься на терминал как обычно, но отправлять ' не удалось 'или' хорошо 'часть к части sendmail.

0
@KamilMaciorowski, я получил "недопустимое имя переменной". Я пытаюсь сделать это в командной строке, кстати. Оболочка TCSH. Veridian 7 лет назад 0

1 ответ на вопрос

0
Kamil Maciorowski

Комментарий ОП:

Для чего-то вроде lsя хочу каталоги, перечисленные в терминале, но я хочу, чтобы "ОК" или "не удалось" перейти к sendmailчасти.

Я не могу сделать это в tcsh. Это должно работать в bash:

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

Я надеюсь, что кто-то возьмет это отсюда, перенесет приведенную выше строку tcshи напишет лучший ответ.

Лучшее, что я могу придумать, это bashсценарий, если только у вас есть bashна машине. Дело в том, что вы можете запустить такой скрипт из tcsh. Это быстрый и грязный скрипт:

#!/bin/bash "$@" { [ $? -eq 0 ] && echo -n OK || echo -n Failed ; echo " at `date`" ; } | sendmail 5556667777@vtext.com 

Измените Шебанг, если вам нужно. Сохраните этот фрагмент кода в файл (например sendstatus.sh), сделайте его исполняемым chmod, а затем используйте его так:

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

Исправления:

  • echo -nзаставляет следующий echoпродолжить в той же строке;
  • последний echoне читает из канала, потому что не имеет смысла;
  • date находится внутри `меток (подстановка команд);
  • Команды сгруппированы по {}разделителям, поэтому их вывод передается в финал |.
Я получаю: {: Команда не найдена. Veridian 7 лет назад 0
Извините, это тоже не сработало. Поэтому, когда он проходит, он также передает выходные данные команды, я просто хочу, чтобы часть "ok at date" или "fail at date" Veridian 7 лет назад 0
@Veridian Как насчет сейчас? Kamil Maciorowski 7 лет назад 0
Я еще не проверил это, но, глядя на это, похоже, что весь вывод команды будет подавлен. Для чего-то вроде 'ls' мне нужны каталоги, перечисленные в терминале, но я хочу, чтобы "Ok" или "fail" перешли к части "sendmail". Veridian 7 лет назад 0
@Veridian Я сдаюсь. Смотрите мой окончательный ответ. Вы должны отредактировать свой вопрос и разместить там все свои пожелания (не ожидайте, что пользователи прочитают все комментарии; вопрос должен быть понятен). Удачи. Kamil Maciorowski 7 лет назад 0
@Veridian Честно говоря, я не думаю, что вопрос заслуживает голосования (пока). Казалось, проблема заключалась в том, «как правильно соединить выходные данные` echo` ». Мой ответ (предыдущая версия, нацеленная на `tcsh`) уже решил эту проблему; также исправлен синтаксис подстановки команд. Затем вы сосредоточились на первом выводе команды. Я думаю, что здесь должно быть как минимум два отдельных вопроса: один о выводах `echo`, второй о первом выводе команды. Если вы хотите сохранить все это здесь, вы должны улучшить вопрос, как я вам сказал. Я нахожу в ожидании своего возмущения, не следуя моим советам, довольно грубо. Kamil Maciorowski 7 лет назад 0
@Veridian Еще одна вещь, о «дополнительном воздействии»: ваше редактирование поднимает вопрос в верхней части главной страницы. Kamil Maciorowski 7 лет назад 0
Очень жаль, что вы так истолковали это. Я изменил уравнение. Veridian 7 лет назад 0
Давайте [продолжим это обсуждение в чате] (http://chat.stackexchange.com/rooms/56319/discussion-between-kamil-maciorowski-and-veridian). Kamil Maciorowski 7 лет назад 0

Похожие вопросы