我知道eshell-command
或eshell-command-result
之类的可以运行eshell命令获得输出,前者返回状态,后者返回输出,不过如果我想对命令进行一些输入,比如发送EOF,该怎么办呢?
我看还有一种方法是先开一个eshell buffer,然后执行eshell命令,这样可以通过把输出定向到另一个buffer,来获得输出。不过这样会不会太麻烦了?
elisp的手册里也没有eshell相关函数的手册
==更新==
eshell还可以用管道,可以cat /xxx/xxx | xxx
,不过我单独跑可以,但经过.emacs
设置打开某类buffer执行这个,管道好像失败了,还是卡住叫我输入。。。
主贴的那个链接的第一个回答。
不过我的需求和他描述的有三个不同:
第一,我要获得输出;
第二,他假设了emacs已经打开了一个eshell buffer。
第三,我想在命令运行的过程中直接输入字符(可能直接insert
?)
我想尽量少开buffer,如果有一个函数就能解决(比如,函数接受一个参数,从这个参数中读取输入,并且输入可以是EOF),那是最好了。
当然我想到了一种开两个buffer解决的情况,主楼说过了,不过我觉得很麻烦。。。不过没有其它很方便的方法的话,那就只有算了。。。
comint-redirect-send-command-to-process
是你需要的吗,从另外一个进程获取输出,比如把其他语言的Repl重定向到其他地方什么的
你想解决的问题是什么?以及为什么你觉得应该用 Eshell 来解决?
你的这个好像不是很容易就能实现的
输入命令的方式有多种
-
(+ 89 90) 一个sexp
-
pwd 或 ls 有对应的 eshell/pwd 或 eshell/ls 命令
-
emacs 内的命令 可以用M-x 执行的
-
sqlite3 属于emacs外的命令 需要用process做交互的
前三个都好说 因为他们用的是一个统一的命令做输出 eshell-output-object
你需要设置自己的handles(我没有找到在哪里设置 但可以用硬编码)
最后一种sqlite3和普通的process交互方式是一样的 也是比较麻烦的地方
需要设置process-filter和process-sentinel(如果你以前做过的话会简单些)