FAR вырезает кавычки в командной строке? Topic is solved

Столкнулись с проблемой в использовании Far? Здесь можно получить помощь.
Post Reply
Wilem82
Posts: 5
Joined: Tue 18 Feb, 2020 12:31

FAR вырезает кавычки в командной строке?

Post by Wilem82 »

Настроил System.Executor на прогу, которая показывает переданные ей параметры.

[Codebox]
Comspec = printargs.exe
ComspecArguments = {0}
ComspecCondition = .*
[/Codebox]

Ввожу в командной строке Фара:

[Codebox]
C:\>'See one coronation' "and you've seen them all"
arg 0 is `C:\work\home\.cargo\bin\printargs.exe`
arg 1 is `'See`
arg 2 is `one`
arg 3 is `coronation'`
arg 4 is `and you've seen them all`
[/Codebox]

То, что было в двойных кавычках превратилось в один параметр.

Можно ли как-то сказать Фару, что бы он ничего не преобразовывал? В реальном сценарии у меня в комспеке стоит `busybox ash -c`, и он должен получать всё как есть и сам обрабатывать все кавычки.

Спасибо.

User avatar
DrKnS
Posts: 5613
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 9 times
Been thanked: 300 times

FAR вырезает кавычки в командной строке?

Post by DrKnS »

Wilem82 wrote:
Tue 18 Feb, 2020 12:40
Можно ли как-то сказать Фару, что бы он ничего не преобразовывал?
Фар ничего не преобразовывывает, преобразовывает рантайм в вашем printargs.
Если есть сомнения - смотреть надо не на то, что в main(argc, argv) приходит, а на командную строку запущенного фаром процесса.

User avatar
HaRT
Moderator
Posts: 9443
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 105 times
Been thanked: 222 times

FAR вырезает кавычки в командной строке?

Post by HaRT »

Wilem82, тот пример разбора, который вы приводите, находится в полном соответствии с правилами, принятыми в Windows.
Да, в них есть странности, связанные со взаимодействием обратных слэшей и двойных кавычек (и об этом есть длинное обсуждение тут на форуме), но ваш пример простой, и аргументы передаются правильно. Чтобы вам передать команду в busybox «как есть», её надо просто целиком заключить в двойные кавычки, а двойные кавычки в команде .
Фар есть инструмент, а не нянька. © 2009 DrKnS

Wilem82
Posts: 5
Joined: Tue 18 Feb, 2020 12:31

FAR вырезает кавычки в командной строке?

Post by Wilem82 »

DrKnS wrote:
Tue 18 Feb, 2020 12:55
а на командную строку запущенного фаром процесса
Затупил, не посмотрел. Действительно всё приходит нормально. Спасибо.

Wilem82
Posts: 5
Joined: Tue 18 Feb, 2020 12:31

FAR вырезает кавычки в командной строке?

Post by Wilem82 »

HaRT wrote:
Tue 18 Feb, 2020 13:01
пример разбора, который вы приводите, находится в полном соответствии с правилами, принятыми в Windows
То есть винда обрабатывает кавычки ещё до того, как передаст аргументы запущенному процессу?

User avatar
HaRT
Moderator
Posts: 9443
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 105 times
Been thanked: 222 times

FAR вырезает кавычки в командной строке?

Post by HaRT »

Wilem82 wrote:
Tue 18 Feb, 2020 13:27
винда обрабатывает кавычки ещё до
Вам же написали, что в данном случае не Винда, а рантайм запускаемого вами процесса (и не до, а уж после). Просто правила этого разбора для всех виндовых приложений общие. Что, впрочем, не мешает отдельным процессам их обходить.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
DrKnS
Posts: 5613
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 9 times
Been thanked: 300 times

FAR вырезает кавычки в командной строке?

Post by DrKnS »

Исходную командную строку можно получить по GetCommandLineW и разобрать так, как вам нравится.

Wilem82
Posts: 5
Joined: Tue 18 Feb, 2020 12:31

FAR вырезает кавычки в командной строке?

Post by Wilem82 »

DrKnS wrote:
Tue 18 Feb, 2020 13:40
Исходную командную строку можно получить по GetCommandLineW и разобрать так, как вам нравится.
Понял, супер, спасибо.

Wilem82
Posts: 5
Joined: Tue 18 Feb, 2020 12:31

FAR вырезает кавычки в командной строке?

Post by Wilem82 »

Да, это была интерпретация стдлиба Rust-а std::env::args(). Через GetCommandLineW то, что нужно:

C:\>"see one coronation" 'and youve seen them all'
Rust stdlib interpretation:
- `C:\printargs.exe`
- `see one coronation`
- `'and`
- `youve`
- `seen`
- `them`
- `all'`
Windows API's GetCommandLineW() version:
- `"C:\printargs.exe" "see one coronation" 'and youve seen them all'`


Ещё раз спасибо за пояснения.

Post Reply

Return to “Нужна помощь”