在expect里面怎样send一串含有特殊字符的字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在expect里面怎样send一串含有特殊字符的字符串相关的知识,希望对你有一定的参考价值。
expect其实就是产生两个进程,一个模拟用户(expect进程本身),一个执行命令(spawn语句产生的进程)。send就是模拟用户在console下输入字符串,我们输入命令都要回车的,相应的send的字符串要用\r结束。脚本里的expect语句相当于用户等待命令输出以确定接下来输入什么命令。 特殊字符转义不好解释,看Exploring Expect吧。好像有一个笨办法是,send每个特殊字符前面都加上\就可以了,expect每个特殊字符前面加上\\\。 send "\$ax\[sdf\]\@\#\r" expect "\\\r\\\n 参考技术A 苦逼你好,这个帖子放到这没人回答,还好我自己找到了答案,我把答案写在这里等待下一个苦逼降临,希望你们能少走一点弯路。1. expect是基于tcl演变而来的,所以很多语法和tcl类似,基本的语法如下所示:
1.1 首行加上/usr/bin/expect
1.2 spawn: 后面加上需要执行的shell命令,比如说spawn sudo touch testfile
1.3 expect: 只有spawn执行的命令结果才会被expect捕捉到,因为spawn会启动一个进程,只有这个进程的相关信息才会被捕捉到,主要包括:标准输入的提示信息,eof和timeout。
1.4 send和send_user:send会将expect脚本中需要的信息发送给spawn启动的那个进程,而send_user只是回显用户发出的信息,类似于shell中的echo而已。
2. 一个小例子,用于linux下账户的建立:
filename: account.sh,可以使用./account.sh newaccout来执行;
1 #!/usr/bin/expect
2
3 set passwd "mypasswd"【这个是你设置的密码】
4 set timeout 60
5
6 if $argc != 1
7 send "usage ./account.sh \$newaccount\n"
8 exit
9
10
11 set user [lindex $argv [expr $argc-1]]
12
13 spawn sudo useradd -s /bin/bash -g mygroup -m $user
14
15 expect
16 "assword"
17 send_user "sudo now\n"
18 send "$passwd\n"
19 exp_continue
20
21 eof
22
23 send_user "eof\n"
24
25
26
27 spawn sudo passwd $user
28 expect
29 "assword"
30 send "$passwd\n"
31 exp_continue
32
33 eof
34
35 send_user "eof"
36
37
38
39 spawn sudo smbpasswd -a $user
40 expect
41 "assword"
42 send "$passwd\n"
43 exp_continue
44
45 eof
46
47 send_user "eof"
48
49
expect脚本 send空格问题
expect其实就是产生两个进程,一个模拟用户(expect进程本身),一个执行命令(spawn语句产生的进程)。send就是模拟用户在console下输入字符串,我们输入命令都要回车的,相应的send的字符串要用结束。脚本里的expect语句相当于用户等待命令输出以确定接下来输入什么命令。特殊字符转义不好解释,看ExploringExpect吧。好像有一个笨法是,send每个特殊字符前面都加上就可以了,expect每个特殊字符前面加上\。send"$ax[sdf]@#
"expect"\
\
" 参考技术A eclipse 建个web project,一个 //1.jsp网页 <form action="login" method="post">//action值和web.xml中的url-pattern值对应 <input type="...
以上是关于在expect里面怎样send一串含有特殊字符的字符串的主要内容,如果未能解决你的问题,请参考以下文章