如何使用 cygwin run.exe 将选项传递给命令

如何使用 cygwin run.exe 将选项传递给命令

我想在我的用户环境中执行 bash 命令,但又不想在 Windows 桌面上打开终端窗口。我尝试过:

c:\cygwin64\bin\run.exe zsh -lic emacs

然后它会打开一个带有我的用户环境的 emacs 窗口。但如果我尝试:

c:\cygwin64\bin\run.exe zsh -lic emacs --name fancy-name

看来这个--name选项是无效的。

我尝试添加引用,但没有成功。

我想要实现的是使用--evalEmacs 中的选项根据我的命令上下文初始化我的 Emacs。

答案1

如果我将内容括在两组引号中,我就可以让 Emacs 在我的设置中解释它的标志,如下所示:

C:\cygwin64\bin\run.exe bash -lic '"emacs -q"'

(顺便说一下,所有这些都在一个cmd窗口中。并且我假设zshbash在与问题相关的任何方面都没有什么不同。)

我认为这里发生的事情是,run在将事情交给之前,它会删除一级引号bash。但是,我认为您不需要额外的间接级别。这也适用于我:

C:\cygwin64\bin\bash.exe -lic "emacs -q"


编辑:但是你当然是--eval在 Emacs 中使用 switch,这意味着你需要对要求值的内容使用引号。这里的问题是 eval 的参数也需要用引号括起来,例如

C:\cygwin64\bin\run.exe bash -lic '"emacs --eval \"(foo)\""'

要在其中引用字符串,您需要根据需要将外部单引号替换为双引号和双重和三重转义:

C:\cygwin64\bin\run.exe bash -lic "\"emacs --eval \\\"(message \\\\\\\"Foo\\\\\\\")\\\"\""

当然,这很快就会变得疯狂。字符串文字语法通过使用单引号使事情变得更合理一些,同时仍允许您在字符串内转义单引号:

C:\cygwin64\bin\run.exe bash -lic "\"emacs --eval $'(message \\\"Foo\\\")'\""

最后,还有一个选项,就是将您想要评估的代码封装为 Emacs 中的一个函数,这样您就可以在不使用字符串或符号文字的情况下调用它。或者,您可以将其放在一个文件中,然后让 Emacs 使用开关加载它-l

相关内容