#+TITLE: Emacs中如何在指定目录下运行shell命令 #+AUTHOR: lujun9972 #+TAGS: Emacs之怒 #+DATE: [2018-09-19 三 14:30] #+LANGUAGE: zh-CN #+OPTIONS: H:6 num:nil toc:t \n:nil ::t |:t ^:nil -:nil f:t *:t <:nil =shell-command= 与 =shell-comand-to-string= 可以用来在Emacs中运行shell命令,这两个函数都会自动根据shell命令是否以 =&= 结尾来自动同步/异步调度shell命令。 这两个命令的不同点在于: + =shell-command= 将shell命令的输出结果写入到新的buffer中 + =shell-command-to-string= 则将输出结果作为字符串返回 这两个命令内部都调用 =call-process=,因此会将 =default-directory= 的值作为shell命令的工作目录(详细说明可以参见 =call-process= 的说明). 因此,Emacs中在指定目录下运行shell命令只需要在 =let= 中临时修改 =default-directory= 的值就行了,像这样 #+BEGIN_SRC emacs-lisp :results org (let ((default-directory "/tmp")) (shell-command-to-string "pwd")) #+END_SRC #+BEGIN_SRC org /tmp #+END_SRC