+ -
当前位置:首页 → 问答吧 → 不借助Expect模块,如何实现对远程计算机程序的启动

不借助Expect模块,如何实现对远程计算机程序的启动

时间:2011-08-27

来源:互联网

计算机A能通过ssh登录到远程计算机B1,B2,B3,...,Bn上,现在,在计算机Bi(1<=i<=n)的/root/目录下有两个可执行shell脚本文件:f1,f2。其中文件f1的内容只有一条语句:./f2 &> /dev/null &,而文件f2中才是实际运行的程序。我想编写perl脚本实现对所有Bi机器上程序(f2)的启动,请问在不借助Expect模块的情况下,如何实现登录到Bi上执行f1启动f2?曾经试图这样写脚本:

$cdCmd="cd /root";
$startCmd="\./f1";
system("ssh root\@$ip $cdCmd;$startCmd");
但是运行时提示:cannot access "f2":No such file or directory.
很明显登录到Bi上执行$cdCmd后再执行$startCmd时,控制已经回到A上了。
请问如何才能实现我想要的功能?这个问题一般怎么处理?期待高手帮忙解答!!!

作者: heartgoon2010   发布时间: 2011-08-27

ssh的参数command可以是subshell command。例如:

Perl code

family@OmicsHome:~$ cat /tmp/f1
#! /bin/bash
./f2
family@OmicsHome:~$ cat /tmp/f2
#! /bin/bash
echo "f2 is running"
family@OmicsHome:~$ ssh family@127.0.0.1 /tmp/f1
family@127.0.0.1's password: 
/tmp/f1: line 2: ./f2: No such file or directory
family@OmicsHome:~$ ssh [email protected] "(cd /tmp/; /tmp/f1)"
[email protected]'s password: 
f2 is running
family@OmicsHome:~$ 

作者: panghuhu250   发布时间: 2011-08-27

上面的代码高亮显示的乱七八糟,为什么不支持shell语法呢?

family@OmicsHome:~$ cat /tmp/f1
#! /bin/bash
./f2
family@OmicsHome:~$ cat /tmp/f2
#! /bin/bash
echo "f2 is running"
family@OmicsHome:~$ ssh [email protected] /tmp/f1
[email protected]'s password: 
/tmp/f1: line 2: ./f2: No such file or directory
family@OmicsHome:~$ ssh [email protected] "(cd /tmp/; /tmp/f1)"
[email protected]'s password: 
f2 is running
family@OmicsHome:~$

作者: panghuhu250   发布时间: 2011-08-27

引用 2 楼 panghuhu250 的回复:
上面的代码高亮显示的乱七八糟,为什么不支持shell语法呢?

family@OmicsHome:~$ cat /tmp/f1
#! /bin/bash
./f2
family@OmicsHome:~$ cat /tmp/f2
#! /bin/bash
echo "f2 is running"
family@OmicsHome:~$ ssh [email protected] /tm……


谢谢你!但还是有两个问题要问一下:
(1)ssh的参数command可以是subshell command,这句话能具体点吗?
(2)如果我执行system("ssh family\@127.0.0.1 \"(cd /tmp/;/tmp/f1)\"");的话,程序应该是启动一个子进程去执行ssh [email protected] "(cd /tmp/; /tmp/f1)";但是如果我执行system("ssh family\@127.0.0.1 cd /tmp/;/tmp/f1");程序似乎是启动两个进程分别取执行ssh family\@127.0.0.1 cd /tmp/;和/tmp/f1。关于system启动子进程的资料很少,这里能推荐点资料看看吗

作者: heartgoon2010   发布时间: 2011-08-27

引用 2 楼 panghuhu250 的回复:
上面的代码高亮显示的乱七八糟,为什么不支持shell语法呢?

family@OmicsHome:~$ cat /tmp/f1
#! /bin/bash
./f2
family@OmicsHome:~$ cat /tmp/f2
#! /bin/bash
echo "f2 is running"
family@OmicsHome:~$ ssh [email protected] /tm……

???

作者: heartgoon2010   发布时间: 2011-08-27