2011-12-09 3 views
0

나는 bash 쉘에서 큰 인자 목록을 가진 펄 스크립트로부터 펄 스크립트를 호출하고 싶다. 인수에는 \, *, (, ) 등과 같은 특수 문자가 포함됩니다. 이러한 특수 문자 각각은 단일 이스케이프 문자 \에 의해 안내됩니다.펄 스크립트에서 perl 스크립트 호출하기

하지만 1 번째 펄 스크립트에서 2 번째 perl 스크립트 (쉘 스크립트를 호출)를 호출하면 이스케이프 문자가 평가되고 특수 문자가 쉘에 노출되어 구문 오류가 발생합니다.

기본적으로 나는 1 차 펄 스크립트에서 2 번째 펄 스크립트를 호출 할 때 이스케이프 문자의 평가를 막고 싶다. 그리고 내 2 번째 펄 스크립트에서 쉘 스크립트를 호출 할 때 평가되어야한다.

예 : 당신이 그 (것)들에게 두 개 이상의 요소 목록을 전달하면

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))을 실행하는 프로그램이 있습니다. 우리가 당신의 가벼운 게시물로 말할 수있는 한, 당신은 잘못된 것을 사용하고있는 것처럼 보입니다. 필요한 것은

system('MonitorAdmin2', @ARGV) 

문자를 "잘못 해석"할 필요가 없습니다.

+0

네, 특수 문자에 관한 문제를 해결하는 것처럼 보입니다 만 다른 문제 즉 현재 직면하고 있습니다. @ARGV list와 함께 MonitorAdmin 명령에 더 많은 인수를 전달하려고합니다. 이 '시스템'명령의 형태로 어떻게 할 수 있습니까? – Yogesh

+0

@ Yogesh, 배열이 아니어도'@ ARGV'는 훨씬 적습니다. 적절한 목록을 반환하는 식을 작성하면됩니다. – ikegami

+0

도와 주셔서 감사합니다. 정말 도움이되었습니다. – Yogesh

2

펄의 execsystem 명령 쉘을 호출하지 않지만 각 목록 요소는 별도의 인수가된다 : 'MonitorAdmin'스크립트 처음 펄에 입력된다 즉, 공백은 인수를 구분하지 않습니다. -c 옵션을 사용하여 셸을 호출하지 않기 때문에 쉘 스크립트를 실행할 때조차도 잘 작동한다고 생각합니다.

+0

여기에는 3 개의 레이어가 있습니다. 첫 번째 호출은 시스템 "bash", "-fc", "2ndPerlScript @ARGV"와 같은 다른 perl 스크립트를 실행하는 MonitorAdmin perl 스크립트로 이동 한 다음이 두 번째 perl 스크립트는 getoptions의 도움말을 다음과 같은 쉘 스크립트에 전파합니다. system "bash", "-fc", "ShellScriptName $ ARGUMENT_LIST" – Yogesh

+0

그러나 문제는 후속 호출에서 @ARGV 목록을 전달할 때 이스케이프 문자가 평가. – Yogesh

관련 문제