从 perl 脚本调用 perl 脚本

发布于 2024-12-20 08:26:06 字数 659 浏览 0 评论 0原文

我想从 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

悲歌长辞 2024-12-27 08:26:06

如果您向 Perl 的 execsystem 命令传递一个包含多个元素的列表,则它们不会调用 shell,但每个列表元素都会成为一个单独的参数,即空格不会不要单独争论。我想即使在执行 shell 脚本时这也能很好地工作,因为您没有使用 -c 选项调用 will。

Perl's exec and system 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.

浅浅淡淡 2024-12-27 08:26:06

system 有两种形式,一种执行 shell命令 (system($shell_cmd)),以及启动程序的命令 (system($program, @args))。据我们从您的灯柱来看,您似乎使用了错误的灯柱。您所需要的只是

system('MonitorAdmin2', @ARGV)

没有外壳来“误解”字符。

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 is

system('MonitorAdmin2', @ARGV)

There is no shell to "misinterpret" the characters.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文