如果我试图在我调用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)
这会将所有输出发送到单个缓冲区.
一种解决方案可能是在实际的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了解其用法.您可能还希望对进程的输出进行一些错误检查.
| 归档时间: |
|
| 查看次数: |
4489 次 |
| 最近记录: |