在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

有人知道怎么了吗?谢谢你。

最佳答案

在Mac OS X上,-tmktemp选项带有一个参数,该参数是临时文件/目录名称的前缀。在Linux上,-t参数仅指示前缀应为$TMPDIR的值或某些默认值(通常为/tmp)。

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

对于独立于平台的调用,请避免使用-t标志并使用显式模板:

mktemp -d "${TMPDIR:-/tmp}/zombie.XXXXXXXXX"

关于linux - 为什么OS X上的mktemp被在Linux上可用的命令破坏了?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31396985/

10-11 01:44