批量执行多个文件


#1

从文档中读到这么一段 The Org Manual: Batch Execution

Org mode features, including working with source code facilities can be invoked from the command line. This enables building shell scripts for batch processing, running automated system tasks, and expanding Org mode’s usefulness.

The sample script shows batch processing of multiple files using org-babel-tangle.

#!/bin/sh
# Tangle files with Org mode
#
emacs -Q --batch --eval "
    (progn
      (require 'ob-tangle)
      (dolist (file command-line-args-left)
        (with-current-buffer (find-file-noselect file)
          (org-babel-tangle))))
  " "$@"

完全没有看懂哇

将代码执行了一下,

$ cat batch-execution.sh
#!/bin/bash
# Tangle files with Org mode
#
emacs -Q --batch --eval "
    (progn
      (require 'ob-tangle)
      (dolist (file command-line-args-left)
        (with-current-buffer (find-file-noselect file)
          (org-babel-tangle))))
  " "$@"

执行结果:

$ bash ./batch-execution.sh
Trailing garbage following expression:

#2

你连要处理的文件名都沒加。

./batch-execution.sh file.org

#3

是呀, 看不懂这两个符号. 在work with source code整个文档中都没出现过.


#4

说明你一点 shell 脚本基础都无⋯⋯

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_05_02

@

Expands to the positional parameters, starting from one, initially producing one field for each positional parameter that is set.


#5

不要这么说(哭泣 LPIC-2咱都过了.


#6

感谢, 这个文档挺好.


#7

读了下你在 文学编程 关键词下的其他回复, 是挺能装*,


#8

所以这些吹 literate programming 的连 CWEB 都没用实际过,更不要说再早的 refinement system,装B技术太不合格了。

老夫一开始用 emacs 就是为了装B,有何高见?

CWEB 主要是针对 C 的特点设计的,不同语言有不同特点,想要简单做个 markup 就说是跨语言的 LP tool 本来就是贻笑大方。


#9

LP的核心是文档与代码的整合管理,将“用代码思考”从一句无从着手的空话,扎扎实实落到实处。

Emacs是一个类别的思维模式,以One統帥n的思維模式。


#10

你这一句话就错了,说明和他们一样连 LP 这个词的出出 CWEB 都没有了解过。想要文档和代码整合,C/C++/Java 有 Doxygen,Haskell 有 Haddock,Rust 有 rustdoc,Ruby Python 有啥啥,这些都不过是文档工具罢了。

你这样一句也只是空话罢了。CWEB 的主要来源 refinement system 表现实际是 Top down 和 Bottom up 单一一种设计方法不能满足实际诉求,refinement 是人类编程自然产生的最佳实践,这是应该由编程语言设计下功夫的,你们看到 CWEB 是个预处理器就以为 LP 就是文档,实际上搞个 markup 做不了什么,说白了就是望闻生义。结果就是反而变成了为了写文档而写文档,最后搞出个奇形怪状的东西,然后人如王yin之类就会说:

DEK 就是个搞数学的,他懂个 P 的编程。

   ——从 DEK 吹到路人

#11

是从DEK吹到DEK黑 :joy:


#12

大概不需要鸡蛋是从哪个养鸡场供给的,我就能来一份西红柿炒鸡蛋。以需求为唯一的出发点。 另外Don not DEK.


#13

对对,我不管你吃鸡蛋还是皮蛋。

Donald Ervin Knuth,按 RMS 的写法写成 DEK 有什么问题。反正都是鸡蛋嘛。更何况还是他自己书上用的写法h

Don 是谁,刘强冬么?


#14

这个提示信息看不懂,我这里(Emacs 26+)也能重现,什么意思?按道理说应该没输出才是。

更新

文档给的代码有问题,不支持 Emacs 26.1 以上版本,--eval 最后面不允许加空白字符了

~ $ emacs --batch --eval '(+ 1 2)'
~ $ emacs --batch --eval '(+ 1 2) '
Trailing garbage following expression:
~ $ emacs --version | head -1
GNU Emacs 26.2.90
~ $ emacs-26.1 --batch --eval '(+ 1 2) '
Trailing garbage following expression:
~ $ emacs-25.3 --batch --eval '(+ 1 2) '
~ $

还不清楚上面道理。


#15

用 mac 自带的 emacs 24 可用。

https://lists.gnu.org/archive/html/bug-gnu-emacs/2016-07/msg00097.html

这位的天才想法。然而实現的時候沒考虑 trailing space。经实验 eval-expression 充许 trailing space。所以这是个 bug


#16

https://debbugs.gnu.org/cgi/bugreport.cgi?bug=23159

:joy:,感觉这个 Bug 系统太丑了些,没多少人愿意看。而且看了也不清楚怎么参与(比如我),下载了 mbox 文件,然后呢?


#17

标准的手续应该是用 M-x report-emacs-bug 有个模版( Macport 修改了这个命令),实际上直接送到 bug-gnu-emacs@gnu.org 就行,会回邮件生成个 thread。这个 bug tracker 应該是只读的。


我現在在想要怎么重做这个,eval-expression 用了 built-in 的 read-from-minibuffer

Update: 可以用 thing-at-point--read-from-whole-string


#18

报告 Bug 我是知道的,但是怎么参与别人提交的 Bug 呢?特别怎么回复其中某一个回复呢?此外怎么又引用呢?

网页上给了个:

To reply to this bug, email your comments to 23159 AT debbugs.gnu.org.

但这里明显应该加个 Web Form 来提交信息才是吗?这样对电子邮件不了解的人也能轻松使用。


#19

你发给針对这个 bug 生成的邮箱比如 23159(AT)debbugs.gnu.org 之后,会由程序 post 到 bug tracker 上,但还是要发给你要回复的人。看这个邮件头。

特别怎么回复其中某一个回复呢?

在邮件开头(有的人喜歡在结尾)用这个格式,用 > 引用要回的邮件整体。

实际上沒有很严格的要求,对方能懂就行,引用也是这格式。


总的來说,对于这个 bug 只要发邮件到 bug-gnu-emacs@gnu.org 新起一个就行,要引用旧 bug 直接用 bug tracker 的 link 在邮件里 ref 就行。之後只要回复发过來就行。


如果沒问題的话我去发 bug 了。


#20

我把问題想复杂了,加个 string-trim 就行了。