我和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
命令在遇到错误后导致脚本停止,在跟踪此类问题时也非常方便。