Я новичок Bash, пытающийся получить автоматическое управление командой точки при изменении целевого файла. Я хотел бы, чтобы выход .png
был открыт в средстве просмотра файлов и обновил изображение на .dot
файле save.Bash & (graphviz) dot output redirection
Я попробовал одну гильзу без толку (я думаю, что проблема буферизация, при этом не выход?):
inotifywait -m --timefmt '%H:%M' --format '%T %w %e %f' -e close_write . |
awk '{print $4}' | dot $1 -Tpng -o foo.png
Moving к основной Баш скрипт, я пытался:
#!/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' для ввода конвейера. –
Что дало вам это предупреждение? 'Dot'? Ваш зритель? Правильно ли был задан '$ FILE' с этим циклом? Если это так, и эта команда 'dot' верна, то цикл' while' должен работать. Хотя когда в процессе обработки 'dot' будет усекать выходной файл, я не уверен. Возможно, вам лучше использовать временный выходной файл, а затем использовать 'mv' для замены реального файла после завершения' dot'. –
Кроме того: если он начинается с '#!/Bin/sh', это скрипт POSIX sh, а не сценарий bash. Сценарии Bash начинаются с '#!/Bin/bash'. –