разработчику


ramok аватар

Очистка временых файлов в shell-скриптах

Допустим у вас есть shell-скрипт который создаёт временные файлы, именованые пайпы и прочие вещи которые необходимо очищать перед окончанием скрита.
Но если пользователь прервал работу вашего скрипта (например по ctrl-c), то в системе останется мусор.

Проблема решается регистрацией обработчика сигнала EXIT. Например

#!/bin/sh
 
TMPFILE=`mktemp`
trap "rm -f $TMPFILE; echo процедура очистки 1>&2" EXIT 
 
# ....

Когда скрипт закончится (не зависимо от того закончится он нормально или пользователь его прервёт), обработчик удалит временный файл и выведет отладочное сообщение.

Грубо говоря это аналог C-шной фунции atexit() или C++-шного деструктора класса (только для всего скрипта).

5
Ваша оценка: Ничего Рейтинг: 5 (1 vote)

Перевод букв в верхний/нижний регистр с помощью sed

Задача: Хочется перевести текст в верхний или нижний регистр с помощью sed. Делаем несколько попыток.

5
Ваша оценка: Ничего Рейтинг: 5 (1 vote)

Имена файлов в переменных баша

Возьмите себе за правило заключать значения переменных в которых храняться имена файлов или путей в кавычки. Таким образом будут поддерживаться пути и имена файлов в которых содержаться пробелы.

#!/bin/sh
for i in "$@"; do
    echo "$i"
done

то вывод у комманды

./script.sh my\ files/*

будет адекватный. если попробовать без кавычек то работать будет криво. можете попробовать. :-)

0
Ваша оценка: Ничего

Мониторинг процессов с помощью kill

Если у вас есть ID процесса, но вы не уверены правильный ли он, можно воспользоваться на первый взгляд самым последним средством: командой kill. Сигнал 0 является специальным и возвращаемое значение kill говорит о том, может ли сигнал быть отослан нужному процессу.

5
Ваша оценка: Ничего Рейтинг: 5 (1 vote)

как загнать бинарные данные в исходник

$ 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

5
Ваша оценка: Ничего Рейтинг: 5 (3 голоса)