我之前已经注意到这一点,但在我回答“如何将目录移动到同名目录中? ”时它又被提出来了:
的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
在类似命名的目录下或中创建文件。
mktemp
macOS 上的手册提到
如果
-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) 在 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)
该命令似乎没有效果。