相关疑难解决方法(0)

在多个平台上找到正确的 tmp 目录

I have a script that needs to create temporary files for its work, and clean up after itself. My question is about finding the right base directory for the temporary files.

The script needs to work on multiple platforms: Git Bash (Windows), Solaris, Linux, OSX. On each platform, the preferred temp directory is expressed differently:

  • Windows: %TMP% (and possibly %TEMP%)
  • OSX: $TMPDIR
  • Linux, UNIX: supposed to be $TMPDIR but appears to be unset on multiple systems I tried

So …

directory shell-script tmp

57
推荐指数
3
解决办法
3万
查看次数

Posix 是否需要任何设备?

Posix 是否需要任何设备?例如,/dev/urandom,/dev/zero/dev/null?

我怀疑不是因为非 *nix 操作系统,而是想要求完整性。

devices posix

15
推荐指数
1
解决办法
2230
查看次数

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
查看次数