web-dev-qa-db-ja.com

一時パスを取得する一般的な方法は?

$TEMPおよび$TMP、しかし、私はそれらがすべてのディストリビューションの標準ではないと思います。

私の知る限り、一時ディレクトリを取得する最善の方法は/tmp、そのパスを使用しても機能しないディストリビューションはありますか?

6

$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)。

11
Kusalananda