我和MKTEMP有问题。我写了一个剧本:

tempdir=$(mktemp -t -d mytemp.XXXXXX)

mv ~/Desktop/File_Converted/* "$tempdir"

cd $tempdir

for f in *; do

    Some stuff...

done

当我运行它时,我得到:
$ ~/Desktop/script.sh
mv: rename /Users/user/Desktop/File_Converted/* to /var/folders/xE/xEV9UA-AFpOdJkN2IrTAArI6Gs/-Tmp-/-d.eiXRhaHY\nmytemp.caNEzp: No such file or directory
/Users/user/Desktop/script.sh: line 21: cd: /var/folders/xE/xEV9UA-AFpOdJkN2IrTAArI6Gs+/-Tmp-/-d.eiXRhaHY: Not a directory

我好像找不到我做错了什么。有什么帮助吗?
谢谢!

最佳答案

你的-t-d混淆了。
mktemp的-t参数接受一个参数,在您的例子中,它接受-d。因此,您将得到一个文件名而不是一个目录,mv将失败。
这个错误特别令人困惑,因为mktemp正在获取您想要的模板(mytemp.XXXXXX),并基于它生成一个临时名称。这就是为什么在错误消息中有一个\n,mktemp的输出实际上是两行。
相关文件:
mktemp[-d][-q][-t前缀][-u]模板…
-做一个目录而不是一个文件。
-T前缀
生成模板(如果已设置,则使用提供的前缀和tmpdir)
创建文件名模板。
根据你的评论,
对于调试,我建议打印$tempdir的值,并查看它是否符合您的预期。你好像还犯了两个MV错误,这对我来说说明出了问题。
bash的set -e命令在遇到错误后导致脚本停止,在跟踪此类问题时也非常方便。

08-06 16:22