我想在我的用户环境中执行 bash 命令,但又不想在 Windows 桌面上打开终端窗口。我尝试过:
c:\cygwin64\bin\run.exe zsh -lic emacs
然后它会打开一个带有我的用户环境的 emacs 窗口。但如果我尝试:
c:\cygwin64\bin\run.exe zsh -lic emacs --name fancy-name
看来这个--name
选项是无效的。
我尝试添加引用,但没有成功。
我想要实现的是使用--eval
Emacs 中的选项根据我的命令上下文初始化我的 Emacs。
答案1
如果我将内容括在两组引号中,我就可以让 Emacs 在我的设置中解释它的标志,如下所示:
C:\cygwin64\bin\run.exe bash -lic '"emacs -q"'
(顺便说一下,所有这些都在一个cmd
窗口中。并且我假设zsh
和bash
在与问题相关的任何方面都没有什么不同。)
我认为这里发生的事情是,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
。