質問
UNIX マシン上で一時フォルダーを見つける適切な方法は、TMP 環境変数を調べることだといつも聞いていました。Windows だけでなく Linux でも動作するコードを作成するときは、TEMP と TMP をチェックします。
今日、Ubuntu インストールにその環境変数がまったくないことに気付きました。
/tmp があればいつでも一時ファイルを保存できるように思えますが、TMP はユーザーが一時ファイルを別の場所に保存するように指示できる手段であると理解していました。
今でもそうですか?
解決
あなたはおそらく考えている TMPDIR
するます。
この変数は一時ファイルを作成する場所を必要とするプログラムのために利用可能となるディレクトリのパス名を表現しなければならない。
他のヒント
一時ディレクトリを作成するための良い方法は、例えば、mktempを使用しています。
mktemp -d -t
この方法で、あなたもあなたのファイル名が既存のファイルと衝突しないことを、確認することができます。
POSIX / FHSは、いくつかのプログラムではなく/tmp
または$TEMP
を検討することを選択するかもしれないが$TMP
は、一時ファイルのルートであることを述べています。
@クリスLercherが言ったことと同様に、私はこれが私のために働くことがわかります:
dirname $(mktemp -u -t tmp.XXXXXXXXXX)
これは実際には(mktempをするために-uフラグの)一時ファイルを作成しませんが、それはあなたの一時ファイルが書き込まれることになるディレクトリを与えるでしょう。このスニペットは(あまりにもおそらく他の* nix)OSXとUbuntu上で動作します。
あなたは変数にそれを設定したい場合は、このような何かをします:
TMPDIR=`dirname $(mktemp -u -t tmp.XXXXXXXXXX)`
# prompt>
printenv | sort
$TMP はそうではありません 宣言する(d)# So, prompt> (i.e. if [ -d /tmp ] is true)
export TMP="/tmp"
export
?変数をサブシェルに渡すため。
また、設定されている場合は $TMPDIR を使用します。これは Linux の正しい変数名です。 はい、私は /tmp ディレクトリを使用します。ファイルは少なくとも再起動時に削除されます。!
FYI - Ubuntuの(私は他のsystemdに基づいてディストリビューションを想定)XDG_RUNTIME_DIR変数定義しない - ちょうど/ TMPよりので、もう少し安全な、ユーザーごとの一時領域である
$エコー$ XDG_RUNTIME_DIR /実行/ユーザー/ 1000
$のls -ld $ XDG_RUNTIME_DIR drwx ------ 2 UbuntuのUbuntuの40 12月22日15時18分/実行/ユーザー/ 1000
私はXDG_RUNTIME_DIRがsystemdに/ PAMによって維持されていると思いますので、 ドッカーズまたは他の非systemdに環境で設定されることはありません。
あなたが好きな場合は、〜/ .bashrcの中でこのような何かを行うことができます:
エクスポートTEMP = "$ {XDG_RUNTIME_DIR: - / TMP}"
を参照してください: https://standards.freedesktop.org/basedir-spec/basedir- SPEC-latest.htmlする https://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する