相关疑难解决方法(0)

如何在shell脚本中创建临时文件?

在运行脚本时,我想在/tmp目录中创建一个临时文件。

执行该脚本后,该脚本将清除该脚本。

如何在shell脚本中做到这一点?

shell-script tmp

243
推荐指数
5
解决办法
24万
查看次数

macOS 上的 mktemp 不支持 $TMPDIR

我之前已经注意到这一点,但在我回答“如何将目录移动到同名目录中? ”时它又被提出来了:

mktemp在MacOS实用程序不表现一样在Linux或BSD(或至少OpenBSD的)的同名的相对于所述公用事业TMPDIR环境变量。

当前目录下创建一个临时文件,我通常可以说

tmdfile=$(TMPDIR=. mktemp)
Run Code Online (Sandbox Code Playgroud)

或者

tmpfile=$(TMPDIR=$PWD mktemp)
Run Code Online (Sandbox Code Playgroud)

(对于带有 的临时目录也类似mktemp -d)。

在 macOS 上,我必须通过给它一个实际模板来强制该实用程序使用当前目录,如

tmpfile=(mktemp ./tmp.XXXXXXXX)
Run Code Online (Sandbox Code Playgroud)

因为使用更方便的tmpfile=$(TMPDIR=. mktemp)将忽略该TMPDIR变量并/var/folders/qg/s5jp5ffx2p1fxv0hy2l_p3hm0000gn/T在类似命名的目录下或中创建文件。

mktempmacOS 上的手册提到

如果-t prefix给出该选项,mktemp将根据前缀和_CS_DARWIN_USER_TEMP_DIR配置变量(如果可用)生成模板字符串。如果_CS_DARWIN_USER_TEMP_DIR不可用,回退位置 是TMPDIR/tmp

在我的系统上,_CS_DARWIN_USER_TEMP_DIR似乎未设置:

$ getconf _CS_DARWIN_USER_TEMP_DIR
getconf: no such configuration parameter `_CS_DARWIN_USER_TEMP_DIR'
Run Code Online (Sandbox Code Playgroud)

但是例如

tmpfile=$(TMPDIR=. mktemp -t hello)
Run Code Online (Sandbox Code Playgroud)

仍然在下创建一个文件/var/folders/.../(也在使用$PWD代替 时.)。

我注意到

$ getconf …
Run Code Online (Sandbox Code Playgroud)

environment-variables mktemp macos

9
推荐指数
1
解决办法
1051
查看次数

标签 统计

environment-variables ×1

macos ×1

mktemp ×1

shell-script ×1

tmp ×1