我是一名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'
答案 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会导致实时图形更新。谢谢大家!