如果我试图在我调用rsync
(或scp
)多次的Emacs Lisp函数中运行shell命令,我应该使用哪个shell-command变量?我目前正在使用shell-command
,它会锁定Emacs,直到完成该过程,并且不会打印带有--verbose
to的应该可见的输出rsync
; 我可以用shell-command
用&
在命令字符串的结尾,使其同步,这并打印进度-但同时它并没有完全"锁定"的Emacs,迷你缓冲区反复问我是否要终止的进程是沉重同时; 并且start-process-shell-command
,只有在传输第一个文件/目录后才会暂停该功能; 当rsync
通过我的功能进行多次通话时忽略其余部分.这些都不是理想的,任何提示?
我自己使用启动过程取得了最大的成功.
(start-process "process-name" (get-buffer-create "*rsync-buffer*") "/path/to/rsync" arg1 ... argn)
这会将所有输出发送到单个缓冲区.
一种解决方案可能是在实际的shell缓冲区中运行该命令.然后你可以选择运行哪一个:
M-x shell M-x eshell M-x term
如果你喜欢这个想法,你可以这样编码:
(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 ...")))
详细'process-send-string
了解其用法.您可能还希望对进程的输出进行一些错误检查.