我想编写一个eshell函数,对现有的命令行脚本进行某种包装。为了做到这一点,我希望能够从eshell函数执行shell命令。我的第一直觉是做一些类似的事情
(defn eshell/myfunc ()
(shell-command "mycommand"))
这种类型的是有效的,除了一些问题。它在一个低劣的shell中运行,而不是像真正的"exec"命令那样运行。这意味着,除其他外,eshell中的命令"myfunc"在命令运行时会出现阻塞。"mycommand"的输出被收集并在末尾显示在Shell输出缓冲区中,但它不会复制正常Shell函数的行为,在正常Shell函数中,标准输出在运行时显示。
那么,正确的方法是什么呢?
尝试
(start-process-shell-command "foo" (current-buffer) "mycommand")
如果您需要更多的控制,请参阅Emacs Lisp Referece Manual,第37.4节创建异步进程。