直到最近,当我在TextMate中保存对.dot文件的更改时,Graphviz会检测到更改并重绘。现在它没有。我已经尝试将文件移动到不同的位置无济于事。现在所有文件都是如此。
答案 0 :(得分:1)
我不使用TextMate,因此我无法提供特定于TextMate的答案(尽管我确实找到了可能有用的this answer on SuperUser)。我想也许是文件夹操作,但它们似乎只在将文件添加到文件夹时起作用,而不是在更改现有文件时。所以我决定寻找一个特定于bash的答案。我遇到了fswatch。使用它,你可以完成你想要的。
创建以下文件夹结构:
我实施此方式的方式,fswatch
和rundot.sh
必须与您的Graphviz文件位于同一文件夹中。
rundot.sh
遍历您的Graphviz文件并在必要时编译它们:
#!/bin/sh
graphvizExtension=gv #Change "gv" to the extension you use for your Graphviz files
graphicFormat=png #Change "png" to the file format you are using
for gvfile in *.$graphvizExtension
do
filename=$(basename "$gvfile")
outfile="../output/${filename%.*}.$graphicFormat" #build output file name
if [[ ! -f $outfile || $gvfile -nt $outfile ]]; then
#output file doesn't exist or Graphviz file is newer than output file
echo "compiling" $gvfile "to" $outfile
dot -T$graphicFormat "$gvfile" -o"$outfile"
else
#This is mainly for testing. You can delete the else clause if you want
echo "not necessary to compile" $gvfile
fi
done
转到终端中的gv
文件夹并输入以下命令:
./fswatch . "./rundot.sh"
现在,只要gv
文件夹发生更改,就会编译任何比相应输出文件更新的Graphviz文件,并将其输出存储在output
文件夹中。您可以将输出文件存储在gv
文件夹中,但是当输出文件更改时,它会再次触发rundot.sh
。我的原始版本每次编译每个Graphviz文件,因此卷入无限循环。这个检查时间戳的版本将再次被触发,但不会在第二次更改任何输出文件,因此不会陷入无限循环。
提取基本文件名的代码来自from this answer。