Однажды я прочитал, что одним из способов получить уникальное имя файла в оболочке для временных файлов было использование двойного знака доллара ( $$). Это действительно создает число, которое время от времени меняется... но если вы вызываете его повторно, оно возвращает один и тот же номер. (Решение состоит в том, чтобы просто использовать время.)
Мне любопытно узнать, что это такое $$на самом деле и почему это предлагается в качестве способа создания уникальных имен файлов.
Решение проблемы
$$это идентификатор процесса (PID) в bash. Использование $$- плохая идея, потому что это обычно создает состояние гонки и позволяет злоумышленнику подорвать ваш сценарий оболочки. Взгляните, например, на всех этих людей, которые создавали небезопасные временные файлы и должны были выпускать рекомендации по безопасности.
Вместо этого используйте mktemp. Man - страница Linux для mktemp превосходна. Вот пример кода из него:
tempfoo=`basename $0`
TMPFILE=`mktemp -t ${tempfoo}` || exit 1
echo "program output" >> $TMPFILE
Комментариев нет:
Отправить комментарий