从 perl 脚本调用 perl 脚本
我想从 bash shell 中带有大参数列表的 perl 脚本调用 perl 脚本。参数包含特殊字符,例如 \
、*
、(
, )
等。这些特殊字符中的每一个都是由单个转义字符 \
引导。
但是,当我从第一个 perl 脚本调用第二个 perl 脚本(然后调用 shell 脚本)时,转义字符会被求值,并且特殊字符会在 shell 中公开,因此会出现语法错误。
所以基本上,当我从第一个 Perl 脚本调用第二个 Perl 脚本时,我想防止转义字符的评估,并且当我从第二个 Perl 脚本调用 shell 脚本时应该评估它。
例如。第一个 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="
I want to call a perl script from a perl script with big argument list in a bash shell. The arguments contains special characters such as \
, *
, (
, )
etc. Each of these special characters are guided by single escape character \
.
But when I call 2nd perl script (which then calls to a shell script) from 1st perl script the escape character gets evaluated and the special characters are exposed in the shell and hence getting syntax error.
So basically i want to prevent escape character's evaluation when I call 2nd perl script from 1st perl script and it should be evaluated when I call shell script from my 2nd perl script.
Eg. Input to the first perl 'MonitorAdmin' script is :
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="
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您向 Perl 的
exec
和system
命令传递一个包含多个元素的列表,则它们不会调用 shell,但每个列表元素都会成为一个单独的参数,即空格不会不要单独争论。我想即使在执行 shell 脚本时这也能很好地工作,因为您没有使用-c
选项调用 will。Perl's
exec
andsystem
commands won't invoke a shell if you pass them a list with more than one element, but each list element becomes a separate argument then, i.e. spaces don't separate arguments. I'd imagine this works well even when executing a shell script since you aren't invoking the shall with a-c
option.system
有两种形式,一种执行 shell命令 (system($shell_cmd)
),以及启动程序的命令 (system($program, @args)
)。据我们从您的灯柱来看,您似乎使用了错误的灯柱。您所需要的只是没有外壳来“误解”字符。
There are two forms of
system
, one that executes a shell command (system($shell_cmd)
), and one that launches a program (system($program, @args)
). As best as we can tell by your light post, you appear to be using the wrong one. All you need isThere is no shell to "misinterpret" the characters.