懒人有懒招:expect
时间:2010-10-17 来源:amazingjxq1
因为运行的机器上面连接某些对应的数据库,编译与运行的机器不是同一台。这样一来,从写好程序到运行就是这样:首先将写好的程序scp到编译机上。然后登录到编译机上,执行make等命令。最后再执行scp将编译好的可执行文件上传到运行机上面。中间的过程要输入3次密码,输入的命令也比较多。这样一来有很多时间都浪费在输入上面,影响工作效率。
expect脚本可以很好的处理这个问题。expect用于处理需要交互的情形。比如需要输入密码等等。其实expect可以用在很多地方,只要是能够自动进行交互而不用人为干扰的操作都可以,没有做不到,只有想不到。
下面的是完成上述操作的expect脚本:
#!/usr/bin/expect -f set timeout -1 set file [lindex $argv 0] set compile_path [lindex $argv 1] set run_path [lindex $argv 2] spawn scp $file user@compile_host:$compile_path expect "*password: " send "mypass\r" spawn ssh user@compile_host expect "*'s password: " send "mypass\r" expect "*-bash-3.00*" send "cd $compile_path; make -f makefileimport; scp binary user@run_host:$run_path\r" expect "*'s password: " send "mypass\r" expect "*-bash-3.00*" send "exit\r" interact
这是一种迫不得已的方法,最好的还是用ssh key来避免输入密码。这样一来密码都是明文保存在脚本当中,不安全。当然可以借助expect输入上面的那些命令。登录ssh的expect脚本可以完成登录之后首先执行某些操作的功能,为了改变登录之后的提示符,可以在脚本中加上执行". .my_bashrc"的操作,这样登录之后显示的提示符就是自己设定的,避免更改/etc/profile文件。同样也可以登录之后进入到某个目录等等。发现有的哥们是把/etc/passwd里面的home路径给改了来达到目的的,因为我们都用的是一个用户,这样自己方便了,但会影响他人。推荐还是用expect脚本完成。
工欲善其事,必先利其器。expect可以节省我们很多的时间。
相关阅读 更多 +