2012-05-10 2 views
2

에서 Expect의 각 스폰 명령에 대한 새 터미널을 시작하는 방법, 터미널을 에뮬레이트하기 위해 로컬 호스트 컴퓨터에서 ssh 명령을 사용하는 스크립트를 작성했습니다. 그래서 다음 시나리오를 고려, 내가 모듈을 기대 사용하는 펄 스크립트 (script.pl 말)을 가지고 있고, 그래서 여기에 문제가 ... 내가 터미널로 사용하고있다 이러한 유형의Expect perl 모듈을 사용하여 perl

$ssh = Expect->spawn("ssh -Y $loginname\@$systemname") 

의 두 명령을 script.pl을 실행하고 내 코드에는 두 개의 스폰 명령이 있습니다. 두 개의 스폰 명령이 script.pl을 실행하는 데 사용 된 터미널에서 시작된다는 것을 알았습니다. 하지만 두 개의 스폰 명령 두 개의 새로운 터미널 싶어요. 그래서 여기에는 script.pl에 3 개의 터미널이 있어야하고, script.pl에 각 스폰 명령이 2 개 있어야합니다.

Expect를 사용하여 단일 Perl 스크립트에서 두 개의 새 터미널을 달성 할 수있는 방법이 있습니까 ??

답변

1

"Expect를 사용하여 단일 Perl 스크립트에서 두 개의 새로운 터미널을 달성 할 수있는 방법이 있습니까?"

확실히. 그러나 터미널은 무엇이든을 좋아하는 신청이다. 명시 적으로 호출해야합니다. 당신이 산란하는 것은 모두 ssh입니다. 터미널 응용 프로그램은 이기종이기 때문에 시스템에서 실행중인 터미널 응용 프로그램과 시작할 때 응용 프로그램을 시작하는 방법을 알아야합니다. 예를 들어 Xfce 터미널의 경우 다음과 같이 입력하십시오.

$ssh = Expect->spawn("Terminal -e \"ssh -Y $loginname\@$systemname\""); 

이 작동해야합니다. 또는 더 나은 :

$ssh = Expect->spawn("Terminal", ("-e", "ssh -Y $loginname\@$systemname")); 

그러나 터미널이 Xfce 터미널이 아닐 수도 있습니다. Windows 사용자 인 경우 cmd이라고 생각합니다. 리눅스에서는 설치되어있는 것에 의존한다. 배포판 기본값을 사용하는 경우 GNOME 용 DE-gnome-terminal, KDE 용 konsole 등과 함께 제공되는 터미널이됩니다.

그러나 터미널을 시작하는 작업을 자동화하면 더 이해할 수 있습니다 시작시 expect/ssh를 사용하여 스크립트를 실행하게하십시오.

+1

터미널은 ssh의 출력/입력을 Expect에서 처리하는 의사 tty로 전달하지 않으므로 대부분 쓸모가 없습니다. – salva

+0

사실,하지만 분명해야합니다. 저는 Expect에 익숙하지 않습니다. 필요합니까? 명령이 완료 될 때 명령으로 호출하면 대부분의 터미널이 리턴 될 것이라고 나는 생각한다. 그러나 OP가 명령을 자동화하여 * 생성 된 터미널에서 일어나는 것을 볼 수 있다면 아마도 이런 식으로 가능하지 않을 것입니다. 예를 들어 Expect를 실행하는 스크립트를 터미널을 시작할 수 있습니다. – delicateLatticeworkFever

+0

Expect는 사용자 상호 작용이 필요한 작업을 자동화하는 데 사용됩니다. 예를 들어 ssh에 암호를 전달하면됩니다. 그렇지 않으면 Expect를 전혀 사용하지 않고'system ('Terminal', '-e', $ ssh_cmd)'을 실행할 수 있습니다. – salva

관련 문제