Вызов сценария perl из сценария perl - PullRequest
0 голосов
/ 09 декабря 2011

Я хочу вызвать скрипт perl из скрипта perl с большим списком аргументов в оболочке bash. Аргументы содержат специальные символы, такие как \, *, (, ) и т. Д. Каждый из этих специальных символов управляется одним управляющим символом \.

Но когда я вызываю второй Perl-скрипт (который затем вызывает скрипт оболочки) из 1-го Perl-скрипта, экранирующий символ оценивается, а специальные символы отображаются в оболочке и, следовательно, получают синтаксическую ошибку.

Таким образом, я хочу предотвратить вычисление escape-символа при вызове 2nd Perl-скрипта из 1-го Perl-скрипта, и его следует оценивать при вызове shell-скрипта из 2-го Perl-скрипта.

Например. Вход в первый Perl-скрипт 'MonitorAdmin':

MonitorAdmin -reversefilter -container="LogServerContainer" -filepath="/home/esg2/YogeshTemp/VSDEFAULT/logs" -filename="System.log" -pattern=".*\t.*\t(DEBUG)\t.*\t.*\t.*\t(SecurityService)\t.*\t.*\t.*\t.*\t.*" -linecount="5001" -targetfile="

Ответы [ 2 ]

2 голосов
/ 09 декабря 2011

Команды Perl exec и system не будут вызывать оболочку, если вы передадите им список с более чем одним элементом, но каждый элемент списка становится отдельным аргументом, то есть пробелы не разделяют аргументы. Я полагаю, что это хорошо работает даже при выполнении сценария оболочки, поскольку вы не вызываете must с параметром -c.

1 голос
/ 09 декабря 2011

Существует две формы system, одна из которых выполняет команду оболочки (system($shell_cmd)), а другая - запускает программу (system($program, @args)).Насколько вы можете судить по вашему легкому сообщению, вы, похоже, используете не тот.Все, что вам нужно, это

system('MonitorAdmin2', @ARGV)

Нет оболочки для "неверного истолкования" символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...