我有以下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
答案 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