UNIXマシンで一時フォルダーを見つける適切な方法は、TMP環境変数を調べることだといつも聞いていました。 LinuxだけでなくWindowsでも機能するコードを作成するとき、TEMPとTMPをチェックします。
今日、私はUbuntuインストールにその環境変数がまったくないことを発見しました。
一時ファイルを配置するために常に/ tmpが存在することを期待できるようですが、TMPはユーザーが一時ファイルを別の場所に配置するように指示できる方法であることを理解しました。
それはまだ事実ですか?
あなたはおそらく TMPDIR
を考えています。
この変数は、一時ファイルを作成する場所を必要とするプログラムで使用できるようにするディレクトリのパス名を表します。
一時ディレクトリを作成する良い方法は、mktempを使用することです。
mktemp -d -t
このようにして、ファイル名が既存のファイルと衝突しないようにすることさえできます。
POSIX/FHSは/tmp
は一時ファイルのルートですが、プログラムによっては$TEMP
または$TMP
代わりに。
@Chris Lercherが言ったことと同様に、これは私にとってうまくいくことがわかります:
dirname $(mktemp -u -t tmp.XXXXXXXXXX)
(mktempの-uフラグのため)実際には一時ファイルは作成されませんが、一時ファイルが書き込まれるディレクトリが提供されます。このスニペットはOSXとUbuntuで動作します(おそらく他の* nixも)。
変数に設定する場合は、次のようにします。
TMPDIR=`dirname $(mktemp -u -t tmp.XXXXXXXXXX)`
FYI-ubuntu(そして私は他のsystemdベースのディストリビューションを想定しています)はXDG_RUNTIME_DIR変数を定義しています-これはユーザーごとの一時スペースであり、/ tmpよりも少し安全です:
$ echo $ XDG_RUNTIME_DIR/run/user/1000
$ ls -ld $ XDG_RUNTIME_DIR drwx ------ 2 ubuntu ubuntu 40 Dec 22 15:18/run/user/1000
XDG_RUNTIME_DIRはsystemd/pamによって管理されているので、Dockersやその他の非システム環境では設定されません。
〜/ .bashrcでこのようなことを行うことができます:
エクスポートTEMP = "$ {XDG_RUNTIME_DIR:-/ tmp}"
参照: https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.htmlhttps://www.freedesktop.org/wiki/
また、XDG_RUNTIME_DIRとSudoに関するいくつかの警告があるようです https://unix.stackexchange.com/questions/346841/why-does-Sudo-i-not-set-xdg-runtime-dir-for -the-target-user