Не заключать командную строку в кавычки

Вам не хватает чего-то в Far? Вы считаете, что вашу идею стоит услышать? Пишите сюда.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Re: Не заключать командную строку в кавычки

Post by Smitis »

Latest post of the previous page:

Увы. Эксперименты показали, что для CMD кавычки лучше оставить. Перенаправление, пайпы, всё это нормально работает до тех пор, пока в пути к командному файлу не втретится пробел (т.е. кавычки будут первым символом). Тут cmd лажается :(
Разум когда-нибудь победит.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Re: Не заключать командную строку в кавычки

Post by Smitis »

Провёл небольшое сравнения поведения cmd и tcc
Для, примера, есть строка типа test.cmd " " " 2" 3
(командный файл только выводит переданные ему параметры)
Возможны случаи:
- Полный путь содержит пробелы или нет (или др. спецсимволы)
- Передаваемый полный путь заключён в кавычки или нет (независимо от того, есть ли пробелы)
- Всё вышеперечисленное может быть заключено в кавычки или нет.
Получается 8 комбинаций. Две из них заведомо неверные (путь содержит пробелы и не заключён в кавычки). Из оставшихся шести одинаковые результаты только в двух случаях :(
Но результаты всегда совпадают, если строку для cmd заключать в кавычки (как сейчас), а для tcc никогда не заключать.

Получается, различать их можно только по имени exe-файла из %comspec%.
Разум когда-нибудь победит.
GMax
Posts: 165
Joined: Wed 10 Aug, 2005 09:20
Has thanked: 1 time

Re: Не заключать командную строку в кавычки

Post by GMax »

Мне кажется правильнее всего было бы ввести настройку "Quote Execuatable Paths" или как там больше нравится со значением 0/1 (если она ещё не введена), а если кто-то поставил себе оригинальный шелл, то он всегда может эту настройку поменять макросом, выполняющимся при старте фара, который решит в зависимости от COMSPEC и фазы луны, какая настройка ему больше нужна
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Re: Не заключать командную строку в кавычки

Post by Smitis »

2useven10 wrote:достаточно ...NotQuotedShell -- список или regex, по-умолчанию пусто.
Использозование ФАРа под "разными" шеллами показало, что самый лучший способ определить, под чем работаем, это посмотреть имя файла в %comspec%. Тестовая пересобранная версия (на текущий момент 3443) работает нормально, предыдущие тоже. Определение шелла сделано примитивно, простым сравнением, но работает.
Переформулируя предложение - добавить настройку, отключающую фичу "заключить всё в кавычки", если имя текущего командного процессора есть в списке, допустим, System.Executor.NotQuotedShell
Попутно возникающее несоответствие System.Executor.BatchType и System.Executor.ExcludeCmds для разных командных процессоров можно решить через переменные среды (если раскрывать их при чтении этих параметров).
Разум когда-нибудь победит.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Re: Не заключать командную строку в кавычки

Post by Smitis »

t-rex wrote:только текущий вариант нормально работает.
Пример:

Code: Select all

(echo Hello&echo World)| msg *
В ФАРе отрабатывает не так, как в CMD.
Строка параметров ComSpecParams, передаваемая CMD выглядит как

Code: Select all

/C ""(echo" Hello& echo World)| msg *"
Лишние кавычки добавляются.
Это я к тому, что "executor" в ФАРе всё-таки не идеальный.
Разум когда-нибудь победит.
2useven10
Posts: 5192
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 309 times

Re: Не заключать командную строку в кавычки

Post by 2useven10 »

Это я к тому, что "executor" в ФАРе всё-таки не идеальный.
:bojan:876, ссылки тоже можно почитать.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Re: Не заключать командную строку в кавычки

Post by Smitis »

Вариант решения сабжа:
- Добавляется строковая опция System.Executor.NotQuotedShell содержащая имена командных процессоров, для которых командную строку не надо заключать в кавычки. По умолчанию TCC.EXE;TCCLE.EXE. Можно использовать переменные среды (на всякий случай). Регулярные выражения сдесь, я думаю, лишние.
- Параметры System.Executor.BatchType и System.Executor.ExcludeCmds могут содержать переменные среды (для возможности гибкой настройки при запуске из-под разных КП).
- При запуске проверяем текущий %comspec% - если exe-файл есть в списке NotQuotedShell, в кавычки не заключаем.
Attachments
executor.7z
diff
(1.19 KiB) Downloaded 112 times
Разум когда-нибудь победит.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Re: Не заключать командную строку в кавычки

Post by Smitis »

Мантис 2442
Разум когда-нибудь победит.
PZM
Posts: 8
Joined: Thu 06 Apr, 2017 10:18

Не заключать командную строку в кавычки

Post by PZM »

После очередного обновления FAR перестал понимать имя файла с пробелами, получаемое им по Ctrl-Enter в командую строку (т. е. раньше я встал курсором на Word'овский документ с длинным именем, нажал Ctrl-Enter и Enter, документ открылся). Теперь пишет: <Первое слово из имени файла> не является внутренней или внешней командой блабла
Как победить?
И второй вопрос: что и где отключить для того, чтобы FAR не заходил по Enter внутрь документа, а просто открывал Word?
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Не заключать командную строку в кавычки

Post by John Doe »

@PZM
Темой вы ошиблись, и даже подфорумом, ведь здесь обсуждаются Предложения и идеи, тогда как вам надо в Нужна помощь.
PZM wrote: FAR перестал понимать имя файла с пробелами
Возможно имеется ввиду, что Ctrl-Enter перестал окавычивать такие имена.
Если да, то не воспроизводится, и вам сюда: http://forum.farmanager.com/viewtopic.php?f=9&t=16
PZM wrote: Теперь пишет: <Первое слово из имени файла> не является внутренней или внешней командой блабла
При отсутствии кавычек так было всегда.
PZM wrote: что и где отключить для того, чтобы FAR не заходил по Enter внутрь документа, а просто открывал Word?
Например откройте настройки плагина arclite.
На будущее: разнородные вопросы не стоит смешивать в кучу, не говоря уже о том, что ответы на них возможно давались, и могут быть найдены поиском.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Не заключать командную строку в кавычки

Post by Shmuel »

PZM, это уже исправлено в билде 4931 (текущая ночная сборка).
Post Reply

Return to “Предложения и идеи”