gpt4 book ai didi

linux - 为什么 OS X 上的 mktemp 会被在 Linux 上运行的命令破坏?

转载 作者:IT王子 更新时间:2023-10-29 01:03:05 28 4
gpt4 key购买 nike

在 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 上,mktemp-t 选项接受一个参数,它是临时文件/目录名称的前缀。在 Linux 上,-t 参数仅指示前缀应该是 $TMPDIR 的值或某个默认值,通常是 /tmp

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

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

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

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com