使用expect脚本的正确姿势 2015-03-19 06:32:22 expect是啥就不多说了,不知道的请自行百度之~ 这货处理一些自动化的东西还是挺方便的,这里简单的记录一下他的正确使用姿势。 示例代码: ```expect #!/usr/bin/expect spawn mysql -uroot -p expect "*assword:*" { send "test\r" } expect "*mysql>*" { send "use test;\r" } expect "*mysql>*" { send "delete from test;\r" } expect "*mysql>*" { send "exit;\r" } expect eof spawn hadoop fs -rm -r /test/ expect eof spawn hive expect "*hive>*" { send "drop database test cascade;\r" } expect "*hive>*" { send "exit;\r" } expect eof ``` 简单的说一下上面脚本的几个关键点: spawn用于启动一个命令,启动后接下来expect开始监听输出。 send是发送文本指令,最后\r表示回车符。 命令执行完毕后,务必使用expect eof确保进程正常退出,否则会提前退出子进程的哦。 最常见的使用姿势是:spawn -> expect -> send -> expect eof 以上这些就足够玩的啦。 当然他还有其他的指令,比如set设置一个变量之类的,详细的使用方法还请自己深入之,O(∩_∩)O #### 补充(2015-10-27) 有时使用expect脚本ssh登录服务器,第一次登录会出现`Are you sure you want to continue connecting (yes/no)? `这样的提示,再次登录就不会出现,这种情况可以采用这样的方式去处理: ``` expect "*$*" { send "ssh iam@host\r" } expect { "yes/no" { send "yes\r"; exp_continue } "password" { send "yourpasswork\r" } } ``` 非特殊说明,均为原创,原创文章,未经允许谢绝转载。 原始链接:使用expect脚本的正确姿势 赏 Prev MySql常用的一些骚操作 Next shell中单引号和双引号的区别