在 Mac OS X 中,直接在终端中使用 mktemp 时没有问题,但 bash 脚本中的相同命令失败。我究竟做错了什么?
直接:
Air2:~ jk$ mktemp -t "$0"
/var/folders/dq/g6bjxff136515xqlntckj0hc0000gn/T/-bash.74Kw3y9E
脚本:
#!/bin/sh
mktemp -t "$0"
脚本运行:
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$
最佳答案
您没有名为 /var/folders/dq/g6bjxff136515xqlntckj0hc0000gn/T//Users/jk/Desktop/Temp/
的目录.
请注意 $0
是 ~/Desktop/Temp/junk.sh
当您在 bash 脚本中使用它时, ~ 也会被扩展。因此,mktemp 现在不是在当前目录中创建一个简单的临时文件,而是尝试在距当前目录 4 级深的目录中创建该文件。由于它不存在,您的命令将失败。
来自 mktemp
的手册页:
-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
的参数应该是单个文件名组件而不是路径值。
关于bash - mktemp 在 bash 脚本中使用时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20176741/