gpt4 book ai didi

emacs - 如何在后台执行 shell 命令?

转载 作者:行者123 更新时间:2023-12-04 19:14:57 25 4
gpt4 key购买 nike

这是运行 shell 脚本的简单定义:

(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

最佳答案

我认为问题是konsole。

(shell-command "xterm &")

执行您期望的操作,在新窗口中打开一个 xterm 并将控制权返回给 Emacs。然而,
(shell-command "konsole &")

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

关于emacs - 如何在后台执行 shell 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10766550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com