Запуск emacs из командной строки и обработка заблокированных файлов - PullRequest
3 голосов
/ 09 августа 2011

Я использую режим org и собираюсь экспортировать свою повестку дня ( пример повестки дня ) в текстовый файл, чтобы я мог отобразить его с помощью conky. В руководстве по режиму org приведен пример командной строки:

emacs -batch -l ~/.emacs -eval '(org-batch-agenda "t")' | lpr

Я изменил это так:

emacs -batch -l ~/.emacs -eval '(org-batch-agenda "e")' \
> ~/org/aux/agenda-export.txt

У меня это задание в качестве задания cron, которое запускается каждые 5 минут. Он прекрасно работает, если у меня не открыт emacs. Тогда я заметил, что файл agenda-export.txt был пуст. При запуске этого вручную из строки coammand и через cron я получаю эту ошибку (или похожую в зависимости от открытых файлов):

...~/org/file.org locked by jwhendy (pid 10935): (s, q, p, ?)?

Я собирался написать сценарий для экспорта в agenda-export-test.txt, а затем, возможно, проверить наличие пустого файла или отсутствие строк (wc -l == 0, может быть?). Если true, оставьте существующий файл в покое и удалите agenda-export-test.txt. Если нет, то переместите agenda-export-test.txt на agenda-export.txt.

Но ... когда я пытаюсь запустить такой скрипт, меня встречает тот же запрос emacs о том, украсть ли блокировку, продолжить или выйти. Я в порядке с продолжением, так как я не думаю, что org-повестки дня что-то делает с файлами, и, таким образом, это ничего не повредит ... но я не знаю, как сказать emacs "принудить" или выбрать "продолжить" «если возникнут проблемы. Мне нужно что-то неинтерактивное.

Итак, подведем итог, мои мысли должны были попытаться:

  • передавая опцию --force или аналогичную emacs, чтобы она продолжалась во время паузы
  • посмотреть, есть ли в экспортированном файле tmp какие-либо строки и обработать их соответственно
  • сказать emacs работать в "режиме только для чтения" (но я не думаю, что он существует)

Основная проблема в том, что с cron я не могу сообщить процессу, что делать, и поэтому он просто создает пустой файл в качестве экспортируемых результатов. Как мне справиться с этим бизнесом с заблокированными файлами с помощью «слепого» процесса, такого как cron, который не может ответить?

Я тоже пытался спросить список рассылки, но ничего не получалось. [1] Я подумал, что у кого-то здесь могут быть идеи.

[1] http://www.mail-archive.com/emacs-orgmode@gnu.org/msg45056.html

1 Ответ

1 голос
/ 09 августа 2011

Вы пробовали копировать файл без использования emacs?вставьте в ваш crontab:

cp ~/org/file.org /tmp/export.org && emacs -batch .... /tmp/export.org ..

Обычная команда "cp" не должна копировать блокировки emacs.Конечно, время от времени вы можете получить поврежденный файл, если сохраните программу только во время выполнения команды cp, но это не должно быть слишком плохо.

...