2

Я хочу выполнить команду 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 ответ1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .