2011-12-09 121 views
0

Perl腳本我想從在bash shell大的參數列表一個perl腳本中調用一個Perl腳本。這些參數包括諸如\*()等等。每個這些特殊字符由單個轉義字符\引導特殊字符。調用Perl腳本

但是,當我打電話從1 Perl腳本第二perl腳本(然後調用一個shell腳本)轉義字符被評估和特殊字符,都暴露在外殼,因此越來越語法錯誤。

所以基本上我想阻止轉義字符的評價時,我稱之爲第二perl腳本從1 Perl腳本,當我打電話shell腳本從我的第二個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=" 
+0

我想避免將另一個轉義字符添加到給MonitorAdmin腳本的參數。 – Yogesh

+1

向我們展示您的錯誤代碼,以便我們解決它。 – ikegami

回答

1

有兩種形式的system,一個執行外殼命令(system($shell_cmd)),和一個啓動的程序(system($program, @args))。就像我們可以通過你的light post所看到的一樣,你似乎使用了錯誤的。所有你需要的是

system('MonitorAdmin2', @ARGV) 

有沒有殼來「曲解」字符。

+0

是的,這似乎解決了有關特殊字符的問題,但現在面臨另一個問題,我想和@ARGV列表一起傳遞更多的參數給MonitorAdmin命令。我將如何以這種'系統'命令的形式來做到這一點? – Yogesh

+0

@Yogesh,它不一定是一個數組,更不用說'@ ARGV'。只需構建一個返回適當列表的表達式即可。 – ikegami

+0

感謝您的幫助,它真的幫助。 – Yogesh

2

Perl的execsystem命令將不會調用一個shell,但每個列表元素成爲一個單獨的參數,然後,即空格不分開參數。我可以想象,即使在執行shell腳本時也能正常工作,因爲您沒有使用-c選項來調用該應用程序。

+0

這裏涉及到3層,第一個電話去MonitorAdmin其執行另一個Perl腳本這樣的perl腳本:系統「慶典」,「-fc」,「2ndPerlScript @ARGV」,然後這第二perl腳本積累與用戶參數getoptions的幫助,他們傳播到這樣的shell腳本:系統「慶典」,「-fc」,「ShellScriptName $ argument_list中」 – Yogesh

+0

但問題是,當我通過在後續調用@ARGV列表,轉義字符變評估。 – Yogesh