Я могу заставить 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, что означает, что вы захотите использовать кавычки с тем, что вы хотите оценить. Загвоздка в том, что аргумент для 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
.