Воспроизведение предупреждения, если скрипт содержит ошибку - PullRequest
1 голос
/ 23 марта 2012

Я запускаю различные скрипты внутри BASH. Они используют различные программы, но в основном для компиляции. E.g.:

#!/bin/bash
cp file1.txt file2.txt
pdflatex file.txt
bibtex file
pdflatex file.txt

Иногда программа сталкивается с ошибкой, которая выводится на печать и останавливает выполнение сценария. Есть ли способ заставить скрипт BASH вызвать звонок, уведомляющий меня о том, что обнаружена ошибка и скрипт остановлен?

Ответы [ 3 ]

6 голосов
/ 23 марта 2012

Вы можете использовать команду trap, чтобы определить функцию выхода и уведомить вас:

function exit_shell {
    echo -e "Goodbye!\a"
}
trap exit_shell 1 2 3 4 5 6 7 8 10 11 12 13 14 15

# And the rest of your script goes here...

Таким образом, почти любой сигнал (кроме 9 или KILL, который не может бытьв ловушке) приведет к выполнению вашей функции.\a будет звучать в терминальном звонке аппаратно-независимым образом (хотя это почти всегда ASCII 0x07).

Однако зачем ограничиваться простым звонком, который может не звучать.Вы можете отправить себе текст SMS с помощью команды mail и шлюза электронной почты вашего оператора сотовой связи.Например, в Verizon вы можете отправить электронное письмо по адресу phone@vtext.com, где phone - ваш номер телефона без тире.

function exit_shell {
    echo -e "Goodbye!" | mailx -s "Command failed!" $phone@vtext.com
}
trap exit_shell 1 2 3 4 5 6 7 8 10 11 12 13 14 15

Или вы можетенайдите клиент Twitter командной строки или клиент Facebook и обновите всех своих друзей своим статусом.

3 голосов
/ 23 марта 2012

echo -e "\007"

007 - ASCII для BEL или звонка.

этот системный гудок?

1 голос
/ 23 марта 2012

Кроме терминального звонка в ответе cctan (который можно отключить), универсального способа сделать это нет. В Linux команду «aplay» можно использовать для воспроизведения звукового файла из командной строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...