Intereting Posts
Что означает \ bi \ b в виде grep? Мышь и клавиатура не работают при одновременном использовании Автоматический вход по устройству с последующим логином пользователя? Keepass не уважает переменную GTK_THEME Vim, как создать файл .swp вручную? Отключить настройку громкости выше 100% в pulseaudio Почему “ `встроенная оболочка и` [[`ключевое слово оболочки? Как выполнить несколько команд во вновь открытом терминале? xfce4-power-manager – невозможно отключить управление яркостью В VMware я добавляю вторую сетевую карту для виртуальной машины, почему каталог-скрипты / не генерируют ifcfg-eno33554984? Я не знаю, как загружать Certbot в вашу операционную систему Добавление пользователя в собственность в дополнение к другому пользователю Как преобразовать <a href="http://xy.com"> XY </a> в ? Используя команду cURL, как извлекать данные запаса, которые возвращаются * без * запятых и пробелов? Удаление Linux на встроенной плате

Как мы можем получить временное имя файла в стандартном сценарии IEEE 1003.1?

Как получить временное имя файла в стандартно-совместимом сценарии оболочки (без использования команд или расширений, которые не описаны в версии IEEE 1003.1 2013 года ).

Кажется, нет никакой утилиты для генерации временного имени файла, только функции библиотеки C.

Не легко.

Вы можете получить (удаленный) файл temp и открыть fd на нем с помощью:

exec 3<<EOF whatever EOF 

Но вы не можете писать позже, и нет команды, которая может заставить вас seek обратно на fd.

Вы можете попробовать и реализовать его вручную:

 mktemp() ( prefix=$1 i=0; suffix= set -C until file=$prefix$suffix error=$({ : > "$file"; } 2>&1) do if [ ! -e "$file" ] && [ ! -L "$file" ]; then # that probably failed for another reason than noclobber. Give up. printf >&2 'Cannot create "%s": %s\n' "$file" "$error" return 1 fi i=$(($i + 1)) suffix=.$i done printf '%s\n' "$file" ) 

Если вам нужна некоторая случайность в имени файла, у awk есть rand() который вы можете использовать с printf("%c") .

Лучше всего избегать временных файлов, если это возможно. Имейте в виду, что их очистка почти такая же боль, как и их создание.

Временные файлы являются проблемой безопасности, только если они создаются в общей папке, такой как /tmp или /var/tmp . Чтобы создать временный файл безопасным и безопасным способом, просто поместите его в каталог, например домашний каталог пользователя, где другие пользователи не имеют права на запись. Например:

 tmpname=$HOME/.deleteme$$ some_command >"$tmpname" 

Используя не общий каталог, все проблемы условий гонки уходят. (Если злоумышленник уже имеет доступ на запись к вашему домашнему каталогу, тогда вы используете pwned, и злоумышленнику не нужно играть с временными файлами и условиями гонки).

Чтобы убедиться, что временный файл удален, создайте ловушку

 trap 'rm -f "$tmpname"' EXIT 

Оператор trap должен быть помещен в скрипт перед созданием файла temp.