Я пытаюсь запустить почтовую команду «wget» из Perl-скрипта. Я использую клубничный perl на машине с Windows 7. Параметр post включает символы амперсанда (&), и когда я запускаю wget внутри обратной кавычки, амперсанд обрабатывается как конец команды, если я хочу, чтобы все до амперсанда выполнялось в фоновом режиме. Я пробовал несколько способов, чтобы попытаться правильно избежать амперсанда. Но у меня закончились идеи.
Итак, команда, которую я пытаюсь запустить, выглядит примерно так:
$wget = "/c/workarea/wget/bin/wget";
$value1 = 1;
$groupName = "group1";
$output = `$wget --post-data 'Field1=${value1}&Field2=Val2&Field3=${groupName}' "http://localhost/LocalPage"`;
Если я запускаю команду из командной строки bash, как показано ниже, она работает нормально:
/c/workarea/wget/bin/wget --post-data 'Field1=1&Field2=Val2&Field3=group1' "http://localhost/LocalPage"
Но когда я запускаю его внутри скрипта Perl, я получаю следующие ошибки:
«Поле2» не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл.
«Поле3» не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл.
Я поместил полную часть «post» команды, которая находится в одинарных кавычках, внутри двойных кавычек, потому что я обнаружил, что это как предложение, указывающее, что что-либо внутри двойных кавычек не интерпретируется. Похоже, это сработало с точки зрения выполняемой команды, не рассматривающей «&» как символ «запуска в фоновом режиме». Но результирующая выполняемая команда не делает то, что я хочу. Это означает, что POST не публикуется из сценария perl, как это происходит, когда я запускаю команду, как указано выше, из командной строки. Я пытался экранировать символ '&', используя одиночный '\' и двойной '\', так как я знаю, что иногда может возникнуть необходимость в многократном экранировании по мере передачи строки. Я даже пробовал это с '\\'. Но, похоже, это ни на что не повлияло.
Я хотел бы использовать обратную галочку, чтобы я мог проанализировать вывод команды для дальнейшего принятия решения позже в сценарии. Итак, я думаю, что мне нужна обратная кавычка вместо «system ()».
Заранее спасибо за любую помощь в том, как мне нужно избежать или процитировать это, чтобы получить правильную обработку. Или, если есть способ увидеть, что делается внутри обратной кавычки после того, как она была интерпретирована и передана оболочке для выполнения. Если бы я знал это, я думаю, я мог бы лучше сказать, что я делаю неправильно.
С уважением, sjmyst