gpt4 book ai didi

shell - 为什么 emacs comint 模式不将字符串作为 shell 处理?

转载 作者:行者123 更新时间:2023-12-01 01:13:20 25 4
gpt4 key购买 nike

例如,我有以下命令来运行我的项目:

java -cp "lib/*:src:resources" clojure.main -m etl-proxy.proxy.core

所以我尝试使用以下命令创建 comint 缓冲区:
(progn 
(kill-all-local-variables)
(erase-buffer)
(comint-mode)
(comint-exec (current-buffer) "etl-proxy"
"java" nil '("-cp" "\"lib/*:src:resources\"" "clojure.main"
"-m" "etl-proxy.proxy.core")))

这将导致 java 类路径错误。但是当我改变 "lib/*:src:resources"键入属性列表这项工作正常。

我如何在 comint 模式下强制字符串处理而不在其中运行 shell?

最佳答案

我认为您所说的“字符串处理”是由通常的 shell 执行的处理。更好的工具(即遵循所有规则,例如需要引用的内容,如果 $(...) 出现在 "..." 中会发生什么,如何扩展 "foo"*"bar" 等...)是 shell 。

如果你知道你需要的处理比 shell 可以做的要简单得多,你可以尝试使用特殊情况代码来避免通过 shell。 shell.el在一些地方这样做并使用 shell--unquote-argument为此,您可以尝试使用该功能,例如:

(comint-exec (current-buffer) "etl-proxy" 
"java" nil (mapcar #'shell--unquote-argument
'("-cp" "\"lib/*:src:resources\"" "clojure.main"
"-m" "etl-proxy.proxy.core"))))

但在你的情况下,使用 shell 可能更简单:
(comint-exec (current-buffer) "etl-proxy" 
"/bin/sh" nil '("-c" "java -cp \"lib/*:src:resources\" clojure.main -m etl-proxy.proxy.core"))

关于shell - 为什么 emacs comint 模式不将字符串作为 shell 处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13620498/

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