разработчику
Очистка временых файлов в shell-скриптах
Допустим у вас есть shell-скрипт который создаёт временные файлы, именованые пайпы и прочие вещи которые необходимо очищать перед окончанием скрита.
Но если пользователь прервал работу вашего скрипта (например по ctrl-c), то в системе останется мусор.
Проблема решается регистрацией обработчика сигнала EXIT. Например
#!/bin/sh TMPFILE=`mktemp` trap "rm -f $TMPFILE; echo процедура очистки 1>&2" EXIT # ....
Когда скрипт закончится (не зависимо от того закончится он нормально или пользователь его прервёт), обработчик удалит временный файл и выведет отладочное сообщение.
Грубо говоря это аналог C-шной фунции atexit() или C++-шного деструктора класса (только для всего скрипта).
Перевод букв в верхний/нижний регистр с помощью sed
Задача: Хочется перевести текст в верхний или нижний регистр с помощью sed. Делаем несколько попыток.
Имена файлов в переменных баша
Возьмите себе за правило заключать значения переменных в которых храняться имена файлов или путей в кавычки. Таким образом будут поддерживаться пути и имена файлов в которых содержаться пробелы.
#!/bin/sh for i in "$@"; do echo "$i" done
то вывод у комманды
./script.sh my\ files/*
будет адекватный. если попробовать без кавычек то работать будет криво. можете попробовать. :-)
Мониторинг процессов с помощью kill
Если у вас есть ID процесса, но вы не уверены правильный ли он, можно воспользоваться на первый взгляд самым последним средством: командой kill. Сигнал 0 является специальным и возвращаемое значение kill говорит о том, может ли сигнал быть отослан нужному процессу.
как загнать бинарные данные в исходник
$ xxd -i binary_file > binary_header.hпоместит в файл binary_header.h дамп файла binary_file в виде:
unsigned char binary_file[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 0x61, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, /* ........... */ }; unsigned int binary_file_len = 340;
xxd является частью пакета vim

