シェルスクリプトで一時ファイルを作成するには?

シェルスクリプトで一時ファイルを作成するには?

/tmpスクリプトを実行するときにディレクトリに一時ファイルを作成したいと思います。

スクリプトを実行すると、スクリプトはスクリプトを消去します。

シェルスクリプトでこれを行うにはどうすればよいですか?

ベストアンサー1

tmpfile=$(mktemp /tmp/abc-script.XXXXXX)
: ...
rm "$tmpfile"

ファイル記述子を開いて削除すると、スクリプトの終了時に(終了と競合を含む)ファイルを削除することができます。/proc/$PID/fd/$FDファイル記述子が開いている限り、ファイルは引き続き使用可能です(スクリプトの場合、実際には他のプロセスではありませんが解決策)。ファイルが閉じられると(プロセスが終了するとカーネルは自動的にこれを実行します)、ファイルシステムはファイルを削除します。

# create temporary file
tmpfile=$(mktemp /tmp/abc-script.XXXXXX)

# create file descriptor 3 for writing to a temporary file so that
# echo ... >&3 writes to that file
exec 3>"$tmpfile"

# create file descriptor 4 for reading from the same file so that
# the file seek positions for reading and writing can be different
exec 4<"$tmpfile"

# delete temp file; the directory entry is deleted at once; the reference counter
# of the inode is decremented only after the file descriptor has been closed.
# The file content blocks are deallocated (this is the real deletion) when the
# reference counter drops to zero.
rm "$tmpfile"

# your script continues
: ...

# example of writing to file descriptor
echo foo >&3

# your script continues
: ...

# reading from that file descriptor
head -n 1 <&4

# close the file descriptor (done automatically when script exits)
# see section 2.7.6 of the POSIX definition of the Shell Command Language
exec 3>&-

おすすめ記事