Bash& (graphviz)点输出重定向

时间:2016-01-21 22:03:53

标签: bash graphviz dot

我是一名Bash新手,每当目标文件发生变化时,都会努力自动运行dot命令。我希望在文件查看器中打开输出.png,并在.dot文件保存上保存图像。

我尝试了一个内衬无效(我认为有缓冲问题,因此没有输出?):

inotifywait -m --timefmt '%H:%M' --format '%T %w %e %f' -e close_write . |
awk '{print $4}' | dot $1 -Tpng -o foo.png

转到基本的Bash脚本,我尝试了:

#!/bin/sh
MONITORDIR="./foo.dot"
inotifywait -m --timefmt '%H:%M' --format '%T %w %e %f' -e close_write "${MONITORDIR}" | while read TIME DIR EVENT FILE
do
    echo $FILE;
    dot -Tpng ${FILE} -o 'foo.png';
done

但是,根据-o标志与重定向(最多2>&1)*的使用,会出现各种问题。通常输出文件是空白的。我宁愿避免潜入深陷巴什兰,但是:我应该做些什么呢?这不应该是一件小事吗?

*例如,Warning: <stdin>: syntax error in line 1 near '16'

1 个答案:

答案 0 :(得分:1)

Etan的评论导致了一个有效的版本:

#!/bin/sh
MONITORDIR="./foo.dot"
inotifywait -m --timefmt '%H:%M' --format '%T %w %e %f' -e close_write "${MONITORDIR}" | while read TIME DIR EVENT FILENAME
do
    echo $TIME;
    echo $DIR;
    echo $EVENT;
    echo $FILENAME;
    dot -Tpng $DIR -o 'foo.png';
done

值得注意的是,裸表语句中有4个位置参数,但bash看到的变量是不同的:

me@comp:~/Projects/inotifytest$ inotifywait -m --timefmt '%H:%M' --format '%T %w %e %f' -e close_write .
Setting up watches.
Watches established.
17:23 ./ CLOSE_WRITE,CLOSE foo.dot

VS

me@comp:~/Projects/inotifytest$ sh dotwatch.sh
Setting up watches.
Watches established.
17:22
./foo.dot
CLOSE_WRITE,CLOSE
<Intentionally blank>

编辑dotfile会导致实时图形更新。谢谢大家!