$TEMP
とについて聞いたことがありますが、$TMP
すべてのディストリビューションの標準ではないと思います。
私が知っている限り、一時ディレクトリを取得する最良の方法はです/tmp
。そのパスで機能しないディストリビューションはありますか?
答え1
$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)
上記のコマンドは(それぞれ)空であるか、変数が設定されていない場合(その結果はデフォルトでmacOSで設定されている)、一時ファイルとディレクトリを$TMPDIR
生成します。/tmp
$TMPDIR
getconf 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
。 (しかし、今はテストできません。)/tmp
mktemp
--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/1000
XDGベースディレクトリに従うシステムの場合、これが返される可能性が高く、そうでない場合は順番に確認されますTMPDIR
。何も設定されていない場合は返されます。TMP
TEMP
/tmp