【发布时间】:2015-09-09 10:18:06
【问题描述】:
在 bash 中遇到了一些特殊问题。我想编写一个脚本,该脚本采用文件名的前缀并删除以该前缀开头并以某些给定后缀结尾的所有文件。为此,我有以下代码行:
#!/bin/bash
if [ $# -lt 1 ]; then
echo "Please provide an argument";
exit 1
fi
# Ending dot already included in $1
rm -f $1"aux" $1"bbl" $1"blg" $1"synctex.gz" $1"log"
# But even if you call it wrong...
rm -f $1".aux" $1".bbl" $1".blg" $1".synctex.gz" $1 ".log"
exit 0
不幸的是,当我按预期调用我的脚本(称为cleanlatex)时:
cmd$ cleanlatex lpa_aaai.
仅删除 .aux 文件。显然rm -f 没有将其应用扩展到所有参数,如果我明确运行rm -f lpa_aaai.aux lpa_aaai.bbl ... 就会这样做。我在这里做错了什么?
编辑:回答@Etan 的问题,这是我在添加这些命令时看到的:
+ '[' 1 -lt 1 ']'
+ rm -v lpa_aaai.aux lpa_aaai.bbl lpa_aaai.blg lpa_aaai.synctex.gz lpa_aaai.log
removed ‘lpa_aaai.aux’
removed ‘lpa_aaai.bbl’
removed ‘lpa_aaai.blg’
removed ‘lpa_aaai.synctex.gz’
removed ‘lpa_aaai.log’
+ rm -v lpa_aaai..aux lpa_aaai..bbl lpa_aaai..blg lpa_aaai..synctex.gz lpa_aaai. .log
rm: cannot remove ‘lpa_aaai..aux’: No such file or directory
rm: cannot remove ‘lpa_aaai..bbl’: No such file or directory
rm: cannot remove ‘lpa_aaai..blg’: No such file or directory
rm: cannot remove ‘lpa_aaai..synctex.gz’: No such file or directory
rm: cannot remove ‘lpa_aaai.’: No such file or directory
rm: cannot remove ‘.log’: No such file or directory
由cannot remove 消息组成的第二组与我无关:无论如何,我只是将这些删除作为故障保护。这正是我需要的。谢谢。
【问题讨论】:
-
试试这个:
rm -f $1{.,}{aux,bbl,blg,log,synctex.gz}. -
在我的机器上没有问题,无论有没有
.输入都可以正常工作。 -
如果你从当前目录运行你的脚本,在你的
.sh文件之前使用./,或者使用absolute path作为/tmp/foo/myscript.sh。 -
如果将
set -x添加到脚本顶部并将-v添加到rm调用,您会看到什么? -
看看我的编辑。