相关疑难解决方法(0)

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

如何使用 sed 将前导制表符替换为 4 个空格?

在 vim 中似乎可以这样做:

:s/^\t\+/\=repeat('    ',len(submatch(0)))
Run Code Online (Sandbox Code Playgroud)

我不知道这如何翻译成 sed 。我尝试了以下操作:

sed -ri "s/^\t\+/\=repeat('    ',len(submatch(0)))/g" test.txt
Run Code Online (Sandbox Code Playgroud)

该命令似乎没有效果。

linux sed regular-expression

2
推荐指数
1
解决办法
1831
查看次数