在emacs lisp中哪个shell命令?

hat*_*rix 10 emacs elisp

如果我试图在我调用rsync(或scp)多次的Emacs Lisp函数中运行shell命令,我应该使用哪个shell-command变量?我目前正在使用shell-command,它会锁定Emacs,直到完成该过程,并且不会打印带有--verboseto的应该可见的输出rsync; 我可以用shell-command&在命令字符串的结尾,使其同步,这并打印进度-但同时它并没有完全"锁定"的Emacs,迷你缓冲区反复问我是否要终止的进程是沉重同时; 并且start-process-shell-command,只有在传输第一个文件/目录后才会暂停该功能; 当rsync通过我的功能进行多次通话时忽略其余部分.这些都不是理想的,任何提示?

Jon*_*ell 13

我自己使用启动过程取得了最大的成功.

(start-process "process-name" 
               (get-buffer-create "*rsync-buffer*") 
               "/path/to/rsync"
               arg1
               ...
               argn)
Run Code Online (Sandbox Code Playgroud)

这会将所有输出发送到单个缓冲区.


Tre*_*son 5

一种解决方案可能是在实际的shell缓冲区中运行该命令.然后你可以选择运行哪一个:

M-x shell
M-x eshell
M-x term
Run Code Online (Sandbox Code Playgroud)

如果你喜欢这个想法,你可以这样编码:

(defun my-rsync-routine ()
  "run some rsync processes"
  (with-temp-buffer
    (shell (current-buffer))
    (process-send-string nil "rsync ...")
    (process-send-string nil "rsync ...")
    (process-send-string nil "rsync ...")))
Run Code Online (Sandbox Code Playgroud)

详细'process-send-string了解其用法.您可能还希望对进程的输出进行一些错误检查.