首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用emacsclient运行cron作业,但如果当前没有打开的服务器,则使用emacs --batch模式运行

使用emacsclient运行cron作业,但如果当前没有打开的服务器,则使用emacs --batch模式运行
EN

Stack Overflow用户
提问于 2012-07-15 14:11:19
回答 2查看 782关注 0票数 2

由于emacs互锁文件,我想通过cron运行org-mobile命令,但使用emacsclient:

代码语言:javascript
复制
emacsclient -nw --eval "(org-mobile-pull)" --eval "(org-mobile-push)"

但是如果没有emacs服务器在运行,我希望命令在emacs批处理模式下运行:

代码语言:javascript
复制
emacs --batch --eval "(org-mobile-pull)" --eval "(org-mobile-push)"

我不知道如何做到这一点,所以好奇,如果有人有任何想法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-15 14:58:56

我很好奇你最终想要实现什么?为什么不总是启动一个新的Emacs进程呢?额外的开销将只有零点几秒。

在我2岁的MBP上:

%时间emacs --批处理--eval nil emacs --批处理--eval nil 0.03s用户0.01s系统87% cpu 0.054总计

沿着您当前的路径,您可以检查emacsclient的退出代码,以决定是否应该批量运行

代码语言:javascript
复制
if emacsclient --eval nil >/dev/null 2>&1; then echo "run client"; else echo "run emacs"; fi

编辑:我看到你想为偷锁问题编写一个答案。请查看我对使用ask-user-about-lock解决此问题的question的回答。

编辑:因此我们的想法是重新定义ask-user-about-lock以返回t。请参阅文档:

ask-user-about-lock是‘userlock.el’中的一个自动加载的Lisp函数。

(询问-用户-关于-锁文件对手)

当用户想要编辑文件但被对手锁定时,询问用户该怎么做。这个函数有三个选择: do (signal‘文件锁定(列出文件对手))以避免编辑文件return t(抓取文件上的锁) return nil (即使文件被锁定也要编辑文件)你可以重新定义这个函数在这三个选项中选择你喜欢的任何方式。

脚本示例(记住chmod)

代码语言:javascript
复制
#!/usr/bin/env emacs --script

(defun ask-user-about-lock (file opponent)
  t)

(org-mobile-pull)
(org-mobile-push)
票数 6
EN

Stack Overflow用户

发布于 2012-07-15 14:53:16

如果服务器未运行,emacsclient将返回错误代码。如果您确定要eval的代码将使emacsclient正常退出,则以下方法应该有效:

代码语言:javascript
复制
emacsclient -nw --eval "(org-mobile-pull)" --eval "(org-mobile-push)" 2>/dev/null || emacs --batch --eval "(org-mobile-pull)" --eval "(org-mobile-push)"

但是请注意,这种简单的方法会丢弃您可能感兴趣的潜在错误消息(但仅在运行emacsclient的情况下)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11489846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档