在Mac OS X中,我直接在终端中使用mktemp没有问题,但是bash脚本中的相同命令失败。我做错了什么?
直接使用:
Air2:~ jk$ mktemp -t "$0"
/var/folders/dq/g6bjxff136515xqlntckj0hc0000gn/T/-bash.74Kw3y9E
SCRIPT:
#!/bin/sh
mktemp -t "$0"
SCRIPT RUN:
Air2:~ jk$ ~/Desktop/Temp/junk.sh
mktemp: mkstemp failed on /var/folders/dq/g6bjxff136515xqlntckj0hc0000gn/T//Users/jk/Desktop/Temp/junk.sh.VrRRi9qE: No such file or directory
Air2:~ jk$
答案 0 :(得分:3)
您没有名为/var/folders/dq/g6bjxff136515xqlntckj0hc0000gn/T//Users/jk/Desktop/Temp/
的目录。
请注意,当您在bash脚本中使用$0
时,~/Desktop/Temp/junk.sh
为mktemp
,并且〜也会展开。因此,mktemp现在尝试在当前目录下4层深的目录中创建文件,而不是在当前目录中创建一个简单的临时文件。由于它不存在,您的命令失败。
来自 -t interpret TEMPLATE as a single file name component, relative to a
directory: $TMPDIR, if set; else the directory specified via -p;
else /tmp [deprecated]
的手册页:
-t
所以,你从马的山上有它。 {{1}}的参数应该是单个文件名组件,而不是路径值。