как изменить цвет текста в таблице HTML с помощью скрипта оболочки

На основании полученных мной ответов (было трудно выбрать один из остальных), не вредно указывать на определенные типы ошибок. используя код выхода, который также использует Bash. Bash (или любая другая оболочка Unix) не будет делать ничего особенного (например, запускать обработчики исключений), если пользовательский сценарий завершается с одним из этих кодов ошибки.

Похоже, что автор Advanced Bash-Scripting Guide согласен с попытками BSD стандартизировать коды выхода ( sysexits.h ) и просто рекомендует , что когда пользователи пишут оболочку В сценариях они не указывают коды выхода, которые конфликтуют с уже используемыми предопределенными кодами выхода, т. е. они ограничивают свои пользовательские коды выхода 50 доступными кодами состояния в диапазоне 64–113.

Я ценю идею (и обоснование), но я бы предпочел, если бы автор был более откровенен, что игнорировать совет не вредно - за исключением случаев, когда потребитель сценария проверяет наличие ошибок, таких как процитированное пример 127 ( команда не найдена ).

Соответствующие спецификации POSIX

Я исследовал, что POSIX говорит о кодах выхода, и спецификация POSIX, похоже, согласуется с автором Advanced Bash-Scripting Guide.Я процитировал соответствующие спецификации POSIX (выделено мной):

Статус выхода для команд

Каждая команда имеет статус выхода, который может влиять на поведение других команд оболочки. Статус выхода команд, не являющихся утилитами, задокументирован в этом разделе. Статус выхода стандартных утилит задокументирован в их соответствующих разделах.

Если команда не найдена, статус выхода должен быть 127. Если имя команды найдено, но это не исполняемая утилита, статус выхода будет 126. Приложения, которые вызывают утилиты без использования оболочки следует использовать эти значения статуса выхода для сообщения об аналогичных ошибках.

Если команда не выполняется во время расширения слова или перенаправления, ее статус выхода должен быть больше нуля.

Внутренне, чтобы решить, завершается ли команда с ненулевым статусом выхода, оболочка должна распознавать все значение статуса, полученное для команды эквивалентом макроса WEXITSTATUS функции wait () (как определено в Системе Объем интерфейсов POSIX.1-2008). Сообщая о статусе выхода с помощью специального параметра '?', Оболочка должна сообщать полные восемь битов доступного статуса выхода. Статус выхода команды, завершившейся из-за приема сигнала, должен быть указан как больше 128.

Утилита exit

Как объяснялось в других разделах, определенные значения статуса выхода были ] зарезервирован для специальных целей, а должен использоваться приложениями только для этих целей:

  • 126 - файл для выполнения был найден, но это не исполняемая утилита.
  • 127 - Утилита для выполнения не найдена.
  • > 128 - Команда была прервана сигналом.

Дополнительная информация

Как бы то ни было, мне удалось проверить все, кроме одного, из списка кодов выхода со специальными значениями . Эта таблица кодов выхода полезна, поскольку она предоставляет более подробную информацию - и примеры того, как генерировать коды ошибок, задокументированные в справочнике Bash .

Попытка сгенерировать статус выхода 128

Используя Bash версий 3.2.25 и 4.2.46, я пытался выдать ошибку 128 Invalid argument to exit , но каждый раз получал 255 (Exit статус вне допустимого диапазона). Например, если exit 3.14159 выполняется как часть сценария оболочки или в интерактивной дочерней оболочке, оболочка завершается с кодом 255 :

$ exit 3.14159
exit
bash: exit: 3.14159: numeric argument required

Для еще большего удовольствия я также пытался запустить простую программу на C, но в этом случае кажется, что функция exit (3) просто преобразовала float в int (в данном случае 3) перед выходом:

#include 
main()
{
    exit(3.14159);
}

-1
26.06.2018, 09:54
1 ответ

Всегда нужно удовлетворять зависимости, поэтому они так и называются.

Тем не менее, лучший способ установки загруженного .debпакета ИМХО:

sudo apt-get install./some_package_name_in_current_directory.deb

Конечно, всегда можно пойти наоборот:

sudo dpkg --install./some_package_name_in_current_directory.deb
sudo apt-get install --fix-missing

Но я нахожу это громоздким.

-121 ---213130 ​​-

Попробуйте это,

awk 'BEGIN{
FS=","
print  "<HTML>""<TABLE border="1"><TH>JOB_NAME</TH><TH>RUN_DATE</TH><TH>STATUS</TH>"
}
 {
printf "<TR>"
for(i=1;i<=NF;i++)
printf "<TD>%s</TD>", $i
print "</TR>"
 }
END{
print "</TABLE></BODY></HTML>"
 }
' test > file.html
sed -i "s/failure/<font color="red">failure<\/font>/g;s/success/<font color="green">success<\/font>/g" file.html
(
echo "To: xyz@abc.com"
echo "Subject: Report"
echo "Content-Type: text/html"
echo
cat file.html
echo
) | /usr/sbin/sendmail -t
0
28.01.2020, 05:12

Теги

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