5

既存のコマンドラインスクリプトをラップするようなeshell関数を作成したいと思います。これを行うために、eshell関数からシェルコマンドを実行できるようにしたいと思います。私の最初の本能は次のようなことをすることでした

(defn eshell/myfunc ()
  (shell-command "mycommand"))

そして、いくつかの問題を除いて、この種の作品。実際の「exec」コマンドのように動作するのではなく、下位シェルで実行されます。これは、特に、eshellのコマンド「myfunc」がコマンドの実行中にブロックされているように見えることを意味します。「mycommand」の出力は収集され、最後にシェル出力バッファーに表示されますが、実行中に標準出力が表示される通常のシェル関数の動作を複製しません。

それで、これを行う正しい方法は何ですか?

4

1 に答える 1

2

試す

(start-process-shell-command "foo" (current-buffer) "mycommand")

さらに制御が必要な場合は、Emacs Lisp Reference Manualの Section 37.4 Making an Asynchronous Process を参照してください。

于 2012-03-17T05:09:32.877 に答える