Выполнение команд аля командная строка

Планы, идеология, архитектура и т.п.

Модератор: Модераторы

Выполнение команд аля командная строка

Сообщение Дож » 29.05.2011 05:35:55

В Free Pascal нет полноценного выполнения команд наподобие командной строки. Разработчики для кроссплатформенности и универсальности рекомендуют использовать TProcess, однако, с ним нужно вручную ловить ввод и вывод программ и перенаправлять куда-то.

Часто хочется вызывать из программ что-то сложное, вида «first a b c | sercond e d f 2>&3 > out || echo error». Поэтому я хочу написать исполнялку таких штук, обёртку над TProcess.

Многие из вас линуксоиды, и, надеюсь, что кто-нибудь объяснит мне некоторые особенности использования командной строки. Я планирую реализовать такой алгоритм разбора (подпрограмма получает на вход строку с командой):
1) Выделяем в строке цитаты (заключённые в двойные кавычки), их в дальнейшем не трогаем, а передаём в виде параметров на последнем шаге в первозданном виде. Всю строку, в которой некоторые части помечены как цитаты, назовём списком.
2) Выделяем в списке закорачивающие операторы — && и ||. Бъём ими строку на части, которые назовём асинхронными списками, их последовательно условно выполняем.
3) Каждый асинхронный список бъём оператором «&» на части, которые назовём конвейром. Все конвейеры выполняются параллельно и в качестве числа-результата для условия выполнения следующего списка мы берём результат первого конвейера (проверьте правильно ли!).
4) В конвейере выделяем самые правые операторы вида
[n]> xxx
[n]>> xxx
[n]< xxx
[n1]<&n2
[n1]>&n2
То, что осталось, разбиваем на части символом |, части будут являться простейшими командами, которые уже можно напрямую выполнить при помощи TProcess, и последовательно передавать их выводы на входы.

Правильно ли я понимаю последовательность разбора? Ничего важного и частоиспользуемого не забыл? Интересно также, в чём различие [n1]<&n2 и [n1]>&n2?
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: Выполнение команд аля командная строка

Сообщение Vadim » 29.05.2011 10:45:33

Дож
Дож писал(а):Правильно ли я понимаю последовательность разбора?

Наверное правильно. :) Только зачем нужен разбор? По-моему, так и нафиг он для Вашей задачи не нужен.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Выполнение команд аля командная строка

Сообщение Padre_Mortius » 29.05.2011 11:49:48

Дож, то, что вы пытаетесь написать уже давным давно написано и оформлено в виде компонента. Называется он CmdLine и используется в DoubleCommander
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Выполнение команд аля командная строка

Сообщение Дож » 29.05.2011 16:19:39

Только зачем нужен разбор? По-моему, так и нафиг он для Вашей задачи не нужен.

И как же без него обойтись? Хочется универсальный механизм, на будущее, а TProcess такого не позволяет.

Дож, то, что вы пытаетесь написать уже давным давно написано и оформлено в виде компонента. Называется он CmdLine и используется в DoubleCommander

Я и так скрипя зубами решил, что придётся использовать целый класс TProcess, вместо просто функций, а тут ещё и часть LCL потащится. Хочется всего по минимуму, планирую писать простенькие консольные программы.

[offtop]Я даже инструкцию по установке затрудняюсь выполнить: «Open cmdline.lpk», всю жизнь использую fpc из-под консоли.[/offtop]
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: Выполнение команд аля командная строка

Сообщение Padre_Mortius » 29.05.2011 16:26:59

Дож, не хотите использовать готовое и не нужно, но идеи и реализацию можно подсмотреть.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Выполнение команд аля командная строка

Сообщение v-t-l » 29.05.2011 21:58:23

Нафиг нужен разбор? Скармливаете всю строку командному интерпретатору (под виндой - cmd.exe, под никсами sh или bash) и все.
v-t-l
энтузиаст
 
Сообщения: 733
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus


Вернуться в Разработки на нашем сайте

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

Рейтинг@Mail.ru