在Linux中,这个shell脚本可以工作:
# Temporary directory for me to work in
myTEMP_DIR="$(mktemp -t -d zombie.XXXXXXXXX)"
# Change to temporary directory
cd "${myTEMP_DIR}"
Run Code Online (Sandbox Code Playgroud)
但是,当我在我的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
Run Code Online (Sandbox Code Playgroud)
谁知道什么是错的?谢谢.
ric*_*ici 17
在Mac OS X上,获取参数的-t
选项,mktemp
该参数是临时文件/目录名称的前缀.在Linux上,-t
参数只是表明前缀应该是$TMPDIR
默认值或某些默认值/tmp
.
因此,在Mac OS X,调用mktemp -t -d zombie.XXXXXXXXX
,表示-t
有一种说法是-d
; 因此,mktemp
创建一个名称以-d
inside $TMPDIR
(/var/folders/d8/b8d1j9x94l9fr3y21xrnc0640000gn/T/-d.QZDPA9Da
)开头的文件.然后,template参数用于创建另一个文件(zombie.nwlEnHGDb
在当前工作目录中).最后,它将两个名称都打印到stdout,在那里它们成为变量的值${myTEMP_DIR}
(完成换行符分隔符).因此,cd
失败了.
对于与平台无关的调用,请避免使用-t
标记并使用显式模板:
mktemp -d "${TMPDIR:-/tmp}/zombie.XXXXXXXXX"
Run Code Online (Sandbox Code Playgroud)