mktempコマンドで一時ファイルをこしらえる

自動的にファイル名にランダム文字列をつけてくれるのでファイル名が衝突しない。

使用例

#!/bin/bash

tmpfile=$(mktemp -p /tmp tmp.XXXXXXXXXX) \
    || { echo 1>&2 "Failed to create tmpfile"; exit 1; }

# 最後にファイルを消す
trap "cd /tmp && test -f '$(basename "$tmpfile")' && rm -f '$(basename "$tmpfile")'" 0

ls /tmp/*
# /tmp/tmp.KRMooxxxxxx だったり
# /tmp/tmp.GXE5Exxxxxx だったり...

使用例2

#!/bin/bash

function make_temp_files() {
    local ret
    ret=0
    { tmp_dir=$(mktemp -p /tmp -d tmp.XXXXXXXXXX) \
        && tmp_file1=$(mktemp -p "${tmp_dir}" tmp.XXXXXXXXXX) \
        && tmp_file2=$(mktemp -p "${tmp_dir}" tmp.XXXXXXXXXX); } || ret=1
    readonly tmp_dir tmp_file1 tmp_file2

    trap "cd /tmp \
            && test -d '$(basename "${tmp_dir}")' \
            && rm -rf  '$(basename "${tmp_dir}")'" 0

    return ${ret}
}


make_temp_files || { echo 1>&2 "Failed to create tmp_dir"; exit 1; }

参考