2014-10-14 3 views
-1

perl 스크립트 내에서 termianl 화면의 텍스트를 캡처하는 방법이 있습니까? 거기에 시스템, 임원, backticks 같은 몇 가지 기능을 알고 있지만 문제는 그들이 script.For 예를 들어에서 명령을 실행하는 것입니다 : 터미널에서 나는 CD/(또는) ls를 쓰고 그 후에 내가 읽을 펄 스크립트를 실행합니다. termianl 화면에 쓰여진 내용 (이 경우 scipt는 termianl에 주어진 cd/(또는) ls를 캡처합니다). 내가 당신에게 스크립트에 명령 줄 인수로 termianl에 쓴 명령을 전달하여 하나의 솔루션으로 왔지만, 다른 방법 ??? 나는이 같은 터미널에 물건을 입력 한 상황에서, 그것을 알고있는 것처럼펄 스크립트 내에서 터미널의 텍스트를 읽는 방법

history | perl -ne 'print $_' 
+0

나는'my $ input = ; '을 원한다고 생각하지만, 사용자가 실제로 입력을하고 엔터를 누를 때까지 코드가 중단됩니다. 또한'chomp ($ input);을 사용하고 싶습니다. – Fluff

+0

확장 할 수 있습니까? 나는 펄을 처음 사용합니다. 지난 2-3 일을 시작했습니다. –

+0

다음 코드를 사용해보십시오 : 'print "이름을 입력하십시오 :"; my $ input = ; chomp ($ input); print "Hello $ input, 만나서 반갑습니다. \ n"; ' – Fluff

답변

1

echo "Hello" 부분에 액세스 할 수 있으며 해당 명령의 출력 인 Hello도 가능합니다.

Perl은 이러한 기능을 제공하지 않습니다. 스크립트/프로그램이 실행되는 프로세스에는 실행되기 전에 동일한 터미널에서 발생한 일에 대한 고유 한 지식이 없으므로 프로그래밍 언어는 그러한 기능을 제공하지 않거나 제공 할 수 없습니다. 이 텍스트에 접근 할 수있는 유일한 방법은 현재 실행중인 터미널에이 정보 (스크롤백 버퍼)의 기록을 남길 수 있는지 여부입니다. 텍스트에서 어떤 문자가 입력되었는지를 구분할 수는 없지만, 출력됩니다. 그러나 공개 API를 통해 정보를 노출하는 터미널이 없다는 것을 알고 있습니다.

그래서 myscript.pl에서 echo "Hello"에 액세스 할 수있게하려면 스크립트에 전달해야합니다. 스크립트에 history을 파이프하면 (그의 답변에서 Mark Setchell이 ​​보여준 것처럼) 하나의 기술입니다. history은 쉘이 내장되어 있으므로 쉘이 가지고있는 지식만큼이나 (터미널과 같은 지식이 아닙니다). 특히이 쉘 세션에서 입력 된 명령 목록을 제공 할 수 있습니다. 그러나이 명령으로 생성 된 출력에 대해서는 알 수 없습니다. (

my @history = `tcsh -c history`; 

(할 매우 복잡 할 것입니다하지만) 당신이 시도 할 수 마지막 것은이 X 서버를 요청하는 것입니다 : 그리고 다른 쉘 세션에 대해 말해, 그래서 펄이 일을하는 것은 매우 쓸모가 없습니다 또는 해당 운영 체제에서 실행중인 경우 Windows) 스크린 샷을 표시 한 다음 현재 터미널이 실행중인 사각형을 찾아서 OCR을 수행하십시오. 겹치는 창을 다루는 등의 문제가 발생할 수 있습니다.

요약하면이를 수행 할 수 없습니다. Perl과 아무 관련이 없습니다. 어떤 프로그래밍 언어로도 이것을 할 수 없습니다.

+0

이것은 변형입니다 ~에 그의 의견에 Shikhar가 언급 한 "명령 줄 인수 (cmd line argument)로 명령을 전달하려는 생각"이 있지만, 아마도 그가 얻게 될 가장 가까운 것이라고 생각합니다. – tobyink

+0

-ne은 무엇을 수행합니까 ?? –

+0

Perl 문서의'perlrun' 페이지 (http://perldoc.perl.org/perlrun.html)는'-n'과'-e'를 포함한 Perl의 다양한 명령 행 옵션이 무엇을하는지 알려줍니다. – tobyink

1

:

[[email protected] ~] echo "Hello" 
Hello 
[[email protected] ~] perl myscript.pl 

당신은 myscript.pl이 원하는 어쩌면이 같이

+0

예 (내가 echo hello를 캡쳐하기 위해 노력하고있는 것) thats .. 그렇다면 가능하지 않다면 나는 cmd 라인 인수로 cmd를 전달함으로써 진행될 것이다. 상세한 explaination에 대해 감사한다. –

관련 문제