在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上,-t
的mktemp
选项带有一个参数,该参数是临时文件/目录名称的前缀。在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/