为什么OS X上的mktemp被一个可以在Linux上运行的命令破坏了?

时间:2015-07-14 03:10:46

标签: linux macos shell

在Linux中,这个shell脚本可以起作用:

# Temporary directory for me to work in
myTEMP_DIR="$(mktemp -t -d zombie.XXXXXXXXX)"

# Change to temporary directory
cd "${myTEMP_DIR}"

但是,当我在Mac上执行此操作时,出现以下错误:

dhcp-18-189-66-216:shell-scripting-sci-day2 myname$ myTEMP_DIR="$(mktemp -t -d zombie.XXXXXXXXX)"
dhcp-18-189-66-216:shell-scripting-sci-day2 myname$ cd "${myTEMP_DIR}"
-bash: cd: /var/folders/d8/b8d1j9x94l9fr3y21xrnc0640000gn/T/-d.QZDPA9Da
zombie.nwlEnHGDb: No such file or directory

任何人都知道什么是错的?谢谢。

1 个答案:

答案 0 :(得分:17)

在Mac OS X上,-t的{​​{1}}选项接受一个参数,该参数是临时文件/目录名称的前缀。在Linux上,mktemp参数只表示前缀应该是-t的值或某些默认值,通常是$TMPDIR

因此,在Mac OS X上,调用/tmp表示mktemp -t -d zombie.XXXXXXXXX参数为-t;因此,-d会在mktemp-d)内创建一个名称以$TMPDIR开头的文件。然后,template参数用于在当前工作目录中创建另一个文件(/var/folders/d8/b8d1j9x94l9fr3y21xrnc0640000gn/T/-d.QZDPA9Da)。最后,它将两个名称输出到stdout,它们变为变量zombie.nwlEnHGDb的值(用换行符分隔符完成)。因此,${myTEMP_DIR}失败。

对于与平台无关的调用,请避免使用cd标志并使用显式模板:

-t