2013-11-24 108 views
1

在Mac OS X中,直接在终端中使用mktemp时没有问题,但bash脚本中的相同命令失败。我究竟做错了什么?mktemp在bash脚本中使用失败

可以直接使用:

Air2:~ jk$ mktemp -t "$0" 

/var/folders/dq/g6bjxff136515xqlntckj0hc0000gn/T/-bash.74Kw3y9E 

SCRIPT:

#!/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$ 
+0

您没有名为'/ var/folders/dq/g6bjxff136515xqlntckj0hc0000gn/T // Users/jk/Desktop/Temp /'的目录。 – Chandranshu

+0

如果你在'〜/ Desktop/Temp'目录中运行'./junk.sh'会怎么样? – eduffy

回答

3

你没有目录名为/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的参数应该是单个文件名称组件,而不是路径值。

+0

为了解决这个问题,请使用basename:'mktemp -t“$(basename”$ 0“)”' –

+0

谢谢,伙计们。一切都很有意义,现在可以运作我应该完全阅读手册页! –