从perl脚本调用perl脚本

从perl脚本调用perl脚本,perl,bash,shell,Perl,Bash,Shell,我想从bash shell中具有大参数列表的perl脚本调用perl脚本。参数包含特殊字符,如\,*,(,)等。这些特殊字符中的每一个都由单个转义字符\引导 但是,当我从第一个perl脚本调用第二个perl脚本(然后调用shell脚本)时,转义字符将被计算,特殊字符将暴露在shell中,因此会出现语法错误 所以基本上,我想在从第一个perl脚本调用第二个perl脚本时阻止转义字符的求值,并且在从第二个perl脚本调用shell脚本时应该求值 例如,第一个perl“MonitorAdmin”脚本的

我想从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="

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

Perl的
exec
system
命令不会调用shell,如果您向它们传递一个包含多个元素的列表,那么每个列表元素都会成为一个单独的参数,也就是说,空格不分隔参数。我可以想象,即使在执行shell脚本时,这也能很好地工作,因为您没有使用
-c
选项调用shall。

有两种形式的,一种是执行shell命令(
system(
shell($shell\u cmd)
),另一种是启动程序(
system($program,@args)
)。从你的灯柱上我们可以看出,你似乎用错了。你所需要的只是

system('MonitorAdmin2', @ARGV)
没有shell可以“曲解”字符。

有两种形式,一种是执行shell命令(
system(
),另一种是启动程序(
system(
)。从你的灯柱上我们可以看出,你似乎用错了。你所需要的只是

system('MonitorAdmin2', @ARGV)

没有“曲解”的外壳字符。

我希望避免在MonitorAdmin脚本的参数中添加另一个转义字符。向我们显示错误代码,以便我们能够修复它。我希望避免在MonitorAdmin脚本的参数中添加另一个转义字符。向我们显示错误代码,以便我们能够修复它。这里涉及三个层,第一个调用转到MonitorAdmin perl脚本,它执行另一个perl脚本,如:system“bash”、“-fc”、“2ndPerlScript@ARGV”,然后这个第二个perl脚本在getoptions的帮助下累积用户参数,并将它们传播到一个shell脚本,如:system“bash”、“-fc”、“ShellScriptName$argument_LIST”但问题是,当我在后续调用中传递@ARGV列表时,转义字符将被计算。这里涉及到3层,第一个调用转到MonitorAdmin perl脚本,它执行另一个perl脚本,如:system“bash”、“-fc”、“2ndPerlScript@ARGV”然后,第二个perl脚本在getoptions的帮助下累积用户参数,并将它们传播到一个shell脚本,如:system“bash”、“-fc”、“ShellScriptName$argument_LIST”,但问题是,当我在后续调用中传递@ARGV LIST时,转义字符得到评估。是的,这似乎解决了有关特殊字符的问题,但现在面临另一个问题,即。我想将更多的参数与@ARGV list一起传递给MonitorAdmin命令。在这种形式的“系统”命令中,我该怎么做呢?@Yogesh,它不必是数组,更不用说
@ARGV
。只需构建一个返回适当列表的表达式。感谢您的帮助,它真的很有帮助。是的,这似乎解决了有关特殊字符的问题,但现在面临另一个问题,即。我想将更多的参数与@ARGV list一起传递给MonitorAdmin命令。在这种形式的“系统”命令中,我该怎么做呢?@Yogesh,它不必是数组,更不用说
@ARGV
。只需构建一个返回适当列表的表达式。感谢您的帮助,它真的很有帮助。