为什么这个bash脚本不能按我的意愿工作

时间:2010-10-11 07:40:41

标签: bash

我有以下bash脚本

for s in $(ls -1 fig/*.py); do
   name=`basename $s .py`
   if [ -e "fig/$name.pdf" -o "fig/$name.pdf" -ot "fig/$name.data" -ot "fig/$name.py" ]; then
      $s
   fi
done

如果输出pdf不存在,或者pdf早于py或数据文件,则应该调用python脚本。

不幸的是,脚本现在从未被调用过。我做错了什么?

修改

谢谢Benoit!我的最终剧本是:

for s in fig/*.py ; do # */ fix highlighting
    name="$(basename "$s" .py)"
    if test ! -e "fig/$name.pdf" -o "fig/$name.pdf" -ot "fig/$name.data" -o "fig/$name.pdf" -ot "fig/$name.py"
    then
        "$s"
    fi
done

1 个答案:

答案 0 :(得分:2)

很多错误。请参阅bash pitfalls,尤其是第一个(永远不要依赖ls来获取文件列表)。

似乎测试结果不合理:连续两个-ot对我来说似乎很奇怪。使用-o执行OR而不是AND似乎也很奇怪。

for s in fig/*.py ; do           # */ for code colouring on SO
    name="$(basename "$s" .py)"
    if test -e "fig/$name.pdf" -o "fig/$name.pdf" -ot "fig/$name.data" -ot "fig/$name.py"
    then
        "$s"
    fi
done