在shell编程中,经常会用到命令的交互,此时就需要在shell中嵌套expect命令
单独使用expect语法参考该文。
例1:test.sh中内容:
#!/bin/sh echo "begin" #echo 是shell语法 expect -c " spawn su root expect \":\" send \"root\r\" send \"ls\r\" expect eof " echo "end"注意:
此时第一行就可以使用默认的脚本版本 #!/bin/sh,而不用使用#!usr/bin/expect(即便用的话,echo会报错)因为实在 expect -c "" 双引号之中,所以,双引号中的双引号都要用转义字符\,否则会报错(ps:测试expect “:”中引号不加\却能正常执行,why?)在最后一个root终端中会等10s ,才打印的end;expect 中除交互命令外的命令可以用send 直接发送。例2:
#!/bin/sh echo "begin" expect -c " spawn su root expect \":\" send \"root\r\" send \"whoami\r\" expect eof " whoami 可以看到expect eof 结束后,就已经退回到了普通用户(python ),虽然终端显示的仍然是root终端(why?)python是在最后一个root终端等待10s后才显示的。例3:可以连续多次使用 spawn 命令,即使没有交互也可以用,当然没有什么交互效果,此时也可以不写,参考例2
#!/bin/sh echo "begin" expect -c " spawn su root expect \":\" send \"root\r\" expect \"root\" send \"whoami\r\" expect eof " expect -c " spawn whoami expect eof "
效果与使用expect -c "" 等同。