mktemp с расширением без указания пути к файлу

В преддверии этого я нашел идентичные вопросы, но ни один из них не дал ответов, которые мне подходят.

Мне нужно сделать временный файл.json (это должен быть json, потому что я буду работать с jq позже в скрипте).

Основываясь на ответах на этот вопрос, я подумал, что это будет следующим, но они создают файлы с именем .json а также XXXXXXXX.json соответственно.

STACKS=$(mktemp .json)
STACKS=$(mktemp XXXXXXXX.json)

Это нужно будет запускать как на Mac OS, так и на Linux. Я не могу указать путь к файлу, потому что он будет запускаться как локально, так и Jenkins, которые имеют неидентичную файловую структуру. Какой правильный синтаксис?

1 ответ

Решение

Если вы используете openBSD mktemp вы можете

STACKS="$(mktemp XXXXXX).json"

а затем написать trap поэтому tmps удаляются после завершения скрипта:

function cleanup {
    if [ -f "$STACKS" ] && [[ "$STACKS" =~ ".json"$ ]]; then
        rm -f "$STACKS"
    fi
}
trap cleanup EXIT

поэтому, когда скрипт завершит работу (независимо от того, как) он попытается удалить $STACKS если это файл и если он заканчивается .json (для дополнительной безопасности).

Другие вопросы по тегам