bash - mktemp 在 bash 脚本中使用时失败

标签 bash

在 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/

相关文章:

regex - 如何检查 bash 中字符串的最后一个字符?

linux - 执行 bash 脚本循环而不因错误而退出

bash 脚本 - 在 cat 中使用和扩展变量

bash - 在 shell/bash 脚本中找不到命令

linux - (Scp - 权限被拒绝(公钥)

bash - POSIX 和 Bash 脚本

bash - 如何在 MAC OSX 上限制程序内存使用的示例

bash - basename 命令未按预期工作

bash - 用 awk 分隔连接的列

bash - 将 shell 变量传递给 ssh