5

这是一个运行 shell 脚本的简单 defun:

(defun bk-konsoles ()
  "Calls: bk-konsoles.bash"
  (interactive)
  (shell-command (concat (expand-file-name "~/its/plts/goodies/bk-konsoles.bash ")
                         (if (buffer-file-name) 
                             (file-name-directory (buffer-file-name)))
                         " &") 
                  nil nil))

如果我启动一个没有 & 符号的程序 - 它会启动脚本,但会阻止 emacs 直到我关闭程序,如果我不放 & 符号它会给出错误:

/home/boris/its/plts/goodies/bk-konsoles.bash /home/boris/scl/geekgeek/: exited abnormally with code 1.

编辑

所以现在我正在使用:

(defun bk-konsoles ()
  "Calls: bk-konsoles.bash"
  (interactive)
  (shell-command (concat (expand-file-name "~/its/plts/goodies/bk-konsoles.bash ") 
                         (if (buffer-file-name) 
                             (file-name-directory (buffer-file-name))) 
                         " & disown") 
                 nil nil)
  (kill-buffer "*Shell Command Output*"))

编辑 2

不 - 不起作用:

(defun bk-konsoles ()
  "Calls: bk-konsoles.bash"
  (interactive)
  (let ((curDir default-directory))
    ;; (shell-command (concat "nohup " (expand-file-name "~/its/plts/goodies/bk-konsoles.bash ") curDir) nil nil)
    (shell-command (concat (expand-file-name "~/its/plts/goodies/bk-konsoles.bash ") 
                           curDir "& disown") nil nil)
    (kill-buffer "*Shell Command Output*")))

让 emacs 保持忙碌 - 使用disown, 或nohup.

如果可能有帮助,这是我正在运行的脚本:bk-konsoles.bash

4

3 回答 3

3

我认为问题出在 konsole 上。

(shell-command "xterm &")

做你所期望的,在新窗口中打开一个 xterm 并将控制权返回给 Emacs。然而,

(shell-command "konsole &")

立即打开和关闭 konsole。关于 konsole 的启动方式似乎是导致问题的原因。我认为 KDE 应用程序有自己的系统来启动应用程序,但我不确定。无论如何,我认为问题不在于 Emacs 方面。

于 2012-06-05T13:47:48.470 回答
2

您可以使用nohupdisown像这样:

$ your_command & disown
$ nohup your_command

有关差异的描述,请参阅stackexchange 上的这篇文章

于 2012-05-27T08:54:09.263 回答
0

哦,我解决了:

(shell-command (concat (expand-file-name "~/its/plts/goodies/bk-konsoles.bash ")
                curDir " 2>&1 > /dev/null & disown") nil nil)

2>&1 > /dev/null &我还在我的 bash 脚本中调用了 konsole 。默默工作!

于 2012-06-05T10:37:46.943 回答