Не заключать командную строку в кавычки
- Smitis
- Posts: 1709
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 55 times
Не заключать командную строку в кавычки
При передачи строки командному процессору функция Execute (в execute.cpp) заключает строку в кавычки, если встретит в ней пробел и/или спецсимволы. Получается вызов вида c:\windows\system32\cmd.exe /c "строка". На самом деле cmd не требует такого заковычивания, но такие строки понимает - обрамляющие кавычки просто удаляются (это даже задокументировано). Но всплывает проблема с TCC (TakeCommand), который вроде как тоже должен кавычки убирать, но когда получаются кавычки в кавычках, результаты разбора строки на параметры у CMD и TCC начинают расходиться. А если эти обрамляющие кавычки не ставить, всё одинаково.
Собственно предложение, сделать это обрамление кавычками опциальным (это если не убрать совсем). Например, параметр System.Executor.QuoteCmdLine, по умолчанию true (т.е., как сейчас), кому надо, выключат через far:config
diff могу подготовить
Собственно предложение, сделать это обрамление кавычками опциальным (это если не убрать совсем). Например, параметр System.Executor.QuoteCmdLine, по умолчанию true (т.е., как сейчас), кому надо, выключат через far:config
diff могу подготовить
Разум когда-нибудь победит.
- John Doe
- Бюрократ
- Posts: 13851
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Re: Не заключать командную строку в кавычки
Где можно почитать о том, что cmd не требует закавычивания?Smitis wrote:На самом деле cmd не требует такого заковычивания, но такие строки понимает - обрамляющие кавычки просто удаляются (это даже задокументировано).
То что обрамляющие кавычки распознаются и удаляются это понятно, но где написано что они не требуются?
Это?
Code: Select all
Если указаны ключи /C или /K, то остальная часть командной строки после
такого ключа обрабатывается как командная строка[...]
- t-rex
- Страшный и ужасный
- Posts: 4910
- Joined: Tue 15 Mar, 2005 16:17
- Location: Tel-Aviv
- Has thanked: 1 time
- Been thanked: 8 times
- Contact:
Re: Не заключать командную строку в кавычки
лучше им в суппорт напиши, а для cmd эти кавычки нужны, уже много раз пытались тот код менять, только текущий вариант нормально работает.
- Smitis
- Posts: 1709
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 55 times
Re: Не заключать командную строку в кавычки
Как я понял, обеспечение 100% совместимости с cmd у них не самая приоритетная задача.t-rex wrote:лучше им в суппорт напиши
Так я предлагаю - опционно. По умолчанию будет включено, старое поведение не сломается.а для cmd эти кавычки нужны, уже много раз пытались тот код менять, только текущий вариант нормально работает.
ДаJohn Doe wrote:Это?
Разум когда-нибудь победит.
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Re: Не заключать командную строку в кавычки
Конвейеры тестировали?Smitis wrote:На самом деле cmd не требует такого заковычивания
Я не пробовал, но почему-то подозреваю, что по cmd /c "foo | bar" без кавычек может получиться не то, что ожидалось.
- HaRT
- Moderator
- Posts: 10858
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Re: Не заключать командную строку в кавычки
Завязываться на имена нестандартных шеллов как-то не комильфо. Да и легко запутаться с их распознаванием: есть ли расширение, есть ли путь и т.п. Сколько пользователей по нескольку раз в день меняют COMSPEC?2useven10 wrote:можно 3-state: on(default), off, other(off если comspec==tcc)
Фар есть инструмент, а не нянька. © 2009 DrKnS
Re: Не заключать командную строку в кавычки
меняют наверное немногие, но те у кого установлены обе оболочки запросто могут запустить фар в любой из них.
add: если DrKnS прав, чистый off вообще вреден.
add: если DrKnS прав, чистый off вообще вреден.
- Smitis
- Posts: 1709
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 55 times
Re: Не заключать командную строку в кавычки
Вроде нормально было. Завтра пересоберу ФАР, ещё потестируюDrKnS wrote:Конвейеры тестировали?
Так и есть2useven10 wrote:меняют наверное немногие, но те у кого установлены обе оболочки запросто могут запустить фар в любой из них.
К сожалению, выбор командных процессоров под Виндой очень невелик
Разум когда-нибудь победит.
- HaRT
- Moderator
- Posts: 10858
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Re: Не заключать командную строку в кавычки
Ну тогда надо для третьего состояния крыжика ещё задавать список значений COMSPEC, для которых off.2useven10 wrote:меняют наверное немногие, но те у кого установлены обе оболочки запросто могут запустить фар в любой из них.
Фар есть инструмент, а не нянька. © 2009 DrKnS
- HaRT
- Moderator
- Posts: 10858
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Re: Не заключать командную строку в кавычки
Как-то не вполне стройно, ведь пустой регэксп находится в любой строке. Может лучше так?: назвать QuotedShell, трактовать как регэксп, по умолчанию пусто (то есть везде закавычивать). Кому надо список, задаст через ‘|’; кому надо никогда не закавычивать, напишет какой-нибудь недопустимый символ, например “>”.2useven10 wrote:достаточно ...NotQuotedShell -- список или regex, по-умолчанию пусто.
Фар есть инструмент, а не нянька. © 2009 DrKnS
Re: Не заключать командную строку в кавычки
может быть формально оно и правильно, но совсем не интуитивно.
для моего наивного сознания - пусто = нет. если умолчанием сделать /.*/ - тогда нормально.
для моего наивного сознания - пусто = нет. если умолчанием сделать /.*/ - тогда нормально.