$TEMP
および$TMP
、しかし、私はそれらがすべてのディストリビューションの標準ではないと思います。
私の知る限り、一時ディレクトリを取得する最善の方法は/tmp
、そのパスを使用しても機能しないディストリビューションはありますか?
$TMPDIR
は、POSIX標準で言及されているように、$TEMP
と$TMP
の両方よりも標準的です。
/tmp
ディレクトリはPOSIX.1-2008に保持され、その可用性を前提とする履歴アプリケーションに対応します。実装では、環境変数TMPDIR
に適切なディレクトリ名を指定することをお勧めします。アプリケーションでは、一時ファイルを作成するためにTMPDIR
の内容を使用することをお勧めします。
参照: http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xbd_chap10.html
少なくともmacOSでは、$TMPDIR
はデフォルトで/tmp
に設定されていませんが、/var/folders/4r/504v61kx02gczk_454db345c0000gn/T/
などに設定されています。ただし、/tmp
は、(何らかの理由で)/private/tmp
へのシンボリックリンクとして引き続き使用できます。
たとえば、スクリプトでtmpdir="${TMPDIR:-/tmp}"
を使用して、設定されている場合は$TMPDIR
を使用し、設定されていない(または空の)場合は/tmp
を使用できます。
非標準のmktemp
ユーティリティは、デフォルトで$TMPDIR
にファイルまたはディレクトリを作成し、その名前を出力します(ただしmacOSにはありません。以下を参照):
tmpfile=$(mktemp)
tmpdir=$(mktemp -d)
使用方法については、システムのmktemp
のマニュアルを確認してください。すべての実装が同じというわけではありません。
MacOSでは、 理由により の場合、mktemp
ユーティリティに明示的なパスを持つテンプレートを指定する必要があります。
tmpfile=$(mktemp "${TMPDIR:-/tmp}"/tmp.XXXXXXXX)
tmpdir=$(mktemp -d "${TMPDIR:-/tmp}"/tmp.XXXXXXXX)
上記のコマンドは、$TMPDIR
、または/tmp
に$TMPDIR
が空の場合、または変数が設定されていない場合(この変数はデフォルトでgetconf DARWIN_USER_TEMP_DIR
の結果(macOS)。