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

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

$TEMPとについて聞いたことがありますが、$TMPすべてのディストリビューションの標準ではないと思います。

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

答え1

$TMPDIRPOSIX規格で述べたように、両方とも標準的です$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)

上記のコマンドは(それぞれ)空であるか、変数が設定されていない場合(その結果はデフォルトでmacOSで設定されている)、一時ファイルとディレクトリを$TMPDIR生成します。/tmp$TMPDIRgetconf DARWIN_USER_TEMP_DIR


Cygwinでは$TMPDIRデフォルトでは設定されていません。

$ echo $TMPDIR


$ echo $TEMP
/tmp

$ echo $TMP
/tmp

代わりに試してみてください${TMPDIR:-${TEMP:-${TMP:-/tmp}}}

答え2

注:オペレーターの質問は、「一時パスを取得する一般的な方法は何ですか?」です。 「一時ファイル/ディレクトリを作成する方法は?」です。

Linuxのマニュアルページには、mktemp次のオプションが含まれています。

mktemp [OPTION]... [TEMPLATE] 
...
-u, --dry-run
    do not create anything; merely print a name
... 
--tmpdir[=DIR]
    interpret TEMPLATE relative to DIR. If DIR is not specified, 
use $TMPDIR if set, else /tmp. With this option, TEMPLATE must 
not be an absolute name. Unlike with -t, TEMPLATE may contain 
slashes, but mktemp creates only the final component. 

したがって、次のいずれかの方法が同じで動作します。

dirname $(mktemp -u --tmpdir)

または

echo ${TMPDIR:-/tmp}

おそらく前者は機能しますが、後者はオプションの下に別の説明がありますが、仕様を使用または使用しませんが、実装するシステムでは機能しませんTMPDIR。 (しかし、今はテストできません。)/tmpmktemp--tmpdir[=DIR]

答え3

可能なすべての設定について環境を確認して、より包括的なアプローチを取ることをお勧めします。また、.XDGの基本ディレクトリ仕様を確認することも忘れないでくださいXDG_RUNTIME_DIR

https://specations.freedesktop.org/basedir-spec/basedir-spec-latest.html

echo ${XDG_RUNTIME_DIR:-${TMPDIR:-${TMP:-${TEMP:-/tmp}}}}

/run/user/1000XDGベースディレクトリに従うシステムの場合、これが返される可能性が高く、そうでない場合は順番に確認されますTMPDIR。何も設定されていない場合は返されます。TMPTEMP/tmp

関連情報