5

シェル スクリプトを実行するための簡単な 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の起動方法に問題があるようです。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 に答える