带扩展名的 mktemp 不指定文件路径

mktemp with extension without specifying file path

在此之前我发现了相同的问题,但其中 none 的答案对我有用。

我需要制作一个临时 .json 文件(它必须是 json 因为我稍后会在脚本中使用 jq ).

我根据 this question 的答案认为应该是以下内容,但他们正在分别创建名为 .jsonXXXXXXXX.json 的文件。

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

这将需要在 mac OS 和 linux 框上 运行。 我无法为文件指定路径,因为它在本地和 Jenkins 中都是 运行,它们具有不同的文件结构。正确的语法是什么?

如果您使用的是 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 结尾(为了额外的安全)。