Latest post of the previous page:
Только, если
/c
отрабатывается как в cmd.exe
Понял, я просто look-behind в regexp ранее не пользовался. Попробую завтра изобразить регэксп тогда.
В фаре увидел RegExp.cpp/hpp, только не знаю, как им пользоваться. Просто подключение RegExp.hpp к пустому проекту Win32 Console application в VS 2015 выдаёт кучу ошибок при попытке компиляции.DrKnS wrote:Ну в процитированном же всё написано: изобразите регекс, который матчит дефолтный "<>|& не в кавычках" - добавим.
(?<=^(?:[^"]*|"[^"]*")*)[<>|&]
^(?:[^\"]|\"[^\"]*\")*?[<>|&]
Code: Select all
#include <iostream>
#include <regex>
using namespace std;
void testRX(wstring str, wregex rx, bool expectedResult) {
bool result = regex_search(str, rx);
wcout << L"\"" << str << L"\": " << endl << " " << (result ? "true" : "false");
if (result != expectedResult)
wcout << L" FAILED";
wcout << endl;
}
int main() {
wregex tooComplexRX(L"^(?:[^\"]|\"[^\"]*\")*?[<>|&]");
testRX(L"grep word file", tooComplexRX, false);
testRX(L"grep \"[<>|&]\" file", tooComplexRX, false);
testRX(L"echo \"&\"", tooComplexRX, false);
testRX(L"grep word file | grep word2", tooComplexRX, true);
testRX(L"grep word file && echo found", tooComplexRX, true);
testRX(L"backup 2>err.log", tooComplexRX, true);
}
System.Executor.ComspecCondition
!^(?:[^\"]|\"[^\"]*\")*?[[(<>|&]
System.Executor.ExcludeCmds
для bash:(;((;.;:;[;[[;bind;builtin;case;command;coproc;declare;echo;eval;exec;exit;export;false;for;function;help;if;kill;let;mapfile;printf;read;readarray;readonly;select;shopt;source;test;time;trap;true;type;ulimit;umask;until;while;{;make
:;
, : в bash - команда no-op (ничего не делать).set ComSpec=C:\cygwin\usr\local\bin\bashcmd.exe
Bash.lua
, который выполняется при старте фара. Также макрос предоставляет горячие клавиши для переключения ComSpec-а bash<->cmd, выполнения текущей команды через альтернативный (не текущий) ComSpec, и запуска интерактивного bash-а.bashcmd.exe
- написанный мною на С++ wrapper (я использовал VS2015), принимает командную строку, если команда имеет расширение bat|cmd|vbs|vbe|js|jse|wsf|wsh|msc
, то запускает её через cmd, иначе оформляет как надо кавычки, и запускает её через bash-wrapper скрипт, путь к нему определяется переменной среды BASHCMD
, а если она не определена, по умолчанию используется C:/cygwin/usr/local/bin/bashcmd.sh
или (если перекомпилить bashcmd.exe
под 64-бит архитектуру) C:/cygwin64/usr/local/bin/bashcmd.sh
. Примечание: дочерний процесс запускается с переменной среды ComSpec, установленной в стандартный путь к cmd.exe
. Таким образом, если запускается, к примеру, bat-файл, то у него не возникнет проблем с выполнением каких-либо ещё bat-файлов или команд через ComSpec.bashcmd.sh
- малюсенький bash-скрипт, который подключает доп функции, переменные среды, алиасы, опции шелла и т.д. путём включения созданного мною /etc/bash.bashcmdrc
, а затем собственно выполняет команду.BASHCMD_DEBUG=1
(или любое другое не-пустое значение), то оба wrapper-а bashcmd.exe
и bashcmd.sh
будут при запуске выводить некоторое количество отладочной информации. Это, в частности, позволяет легко различить, выполняется ли конкретная команда через ComSpec, или же Фар выполняет её напрямую (direct run)./etc/bash.bashcmdrc
- мой файл, подгружает алиасы, доп. функции, устанавливает некоторые переменные окружения и опции shell-а (shopt). Так как shell запускается как не-интерактивный, то перед загрузкой алиасов необходимо установить shopt -s expand_aliases
.(;((;.;:;[;[[;bind;builtin;case;command;coproc;declare;echo;eval;exec;exit;export;false;for;function;help;if;kill;let;mapfile;printf;read;readarray;readonly;select;shopt;source;test;time;trap;true;type;ulimit;umask;until;while;{;make
^(?:[^\"]|\"[^\"]*\")*?[[({$;<>|&]
/S /C "{0}"
(значение по умолчанию)System.Executor.ExcludeCmds
, System.Executor.ComspecCondition
.Как именно? Что насчёт ComspecCondition?Smitis wrote:System.Executor.ExcludeCmds можно менять через переменные среды.
В параметре можно использовать переменные среды в виде %FAR_ExcludeCmds% (это переменная, которую я использую).gene.pavlovsky wrote:Как именно?
\n
или \r
).