26.1.2. Создание уникальных временных файлов
26.1.2. Создание уникальных временных файлов
При рассмотрении специальных переменных уже обсуждалась переменная $$ Она содержит ID или номер процесса, выполняющегося в текущий момент. Эти сведения применяются при создании временных файлов в текущем сценарии, поскольку ID процесса уникален в рамках сценария. Достаточно лишь создать файл и присоединить к нему символ $$, После завершения можно удалить все файлы, имеющие символ $$ в качестве расширения. Интерпретатор shell оценивает переменную $$ как текущий ID процесса и удаляет эти файлы, но оставляет файлы, к которым присоединен ID процесса.
В командной строке введите следующую команду:
$ echo $$
281
Это значение ID процесса приведено для примера; в вашем случае, скорее всего, будет получено другое значение. Если создать новый сеанс и ввести эту же команду, получится другой номер, поскольку будет запущен иной процесс.
$ echo $$
382
Ниже приводится сценарий, который создает два временных файла, обрабатывает и затем удаляет их.
$ pg tempfiles
#!/bin/sh
#tempfiles
#именование временных файлов
HOLD1=/tmp/hold1.$$
HOLD2=/tmp/hold2.$$
#выполнение определенной обработки с помощью этих файлов
df -tk > $HOLD1
cat $HOLD1 > $HOLD2
# удаление файлов
rm /tmp/*.$$
При выполнении этого сценария создаются следующие два файла.
hold1.408 hold2.408
Когда указывается команда rm /tmp/*.$$, интерпретатор shell в действительности выполняет команду rm /tmp/*.408.
Важно помнить, что ID процесса является уникальным только в конкретный момент времени. Например, если приведенный выше сценарий выполнить снова, получим новый ID процесса, поскольку речь идет о другом процессе.
Благодаря использованию даты можно отслеживать файлы, созданные для специальных целей. Помимо этого, значительно облегчается очистка файлов на базе определенных дат, поскольку с первого взгляда видно, какие файлы создавались раньше, а какие позже.
Временные файлы создаются легко и быстро; кроме того, они являются уникальными для данного процесса. После того как сценарий завершает обработку, их несложно удалить без искажения остальной информации.