expect命令(expectsend命令中带[]怎么处理)
![expect命令(expectsend命令中带[]怎么处理)](/static/images/content_image/pexels-gelgas-airlangga-401213.jpg)
本文目录
- expectsend命令中带[]怎么处理
- linux的expect代码,发现如果不加interact,则send命令好像没有执行,如果加上interact命令才执行
- linux spawn命令
- 如何判断expect中调用的命令是否成功
- expect学习之如何获取命令行参数和函数参数
- shell脚本中,用expect命令如何实现自动远程操作,折磨我好久了..
- expect如何将命令结果赋值给变量
- windows expect怎么使用
expectsend命令中带[]怎么处理
expectsend命令中带处理的方法是
1、使用转义字符(将匹配方括号和字母a、b、c中的任意一个。
2、使用字符范围(-):方括号内可以使用连字符(-)表示一个字符范围。例如,表示匹配从小写字母a到小写字母z之间的任意一个字符。
3、使用反向字符集(^):在方括号内的开头使用^表示反向字符集,即匹配不在方括号中的字符。例如,表示匹配任何非数字字符。
linux的expect代码,发现如果不加interact,则send命令好像没有执行,如果加上interact命令才执行
常见的做法是将interact换成 expect eof ,从而可以捕获到spawn命令启动的进程的结束状态。
如果坚持使用interact可以在命令执行完成后依然保持在登陆在远程服务器上,可以直接手工敲命令进行交互,完成后续工作,最后需要exit退出ssh远程登陆。
至于去掉interact却没有使用expect eof的情况下send没有执行的问题,主要是因为因为spawn会启动一个进程,但是没有捕获匹配eof或者time out事件造成的
linux spawn命令
spawn是进入expect环境后才可以执行的expect内部命令。expect是一种脚本语言,它能够代替我们实现与终端的交互,我们不必再守候在电脑旁边输入密码,或是根据系统的输出再运行相应的命令。
如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。所以不要用 “which spawn“之类的命令去找spawn命令。好比windows里的dir就是一个内部命令,这个命令由shell自带,用户无法找到一个dir.com或dir.exe的可执行文件。它主要的功能是给运行进程加个壳,用来传递交互指令。
扩展资料:
下面是一个能用来实现自动执行该命令的Expect脚本:
#!/usr/bin/expect
# Change a login shell to tcsh
set user
spawn chsh $user
expect "]:"
send "/bin/tcsh "
expect eof
exit
和其他脚本一样首行指定用来执行该脚本的命令程序,这里是/usr/bin/expect。程序第一行用来获得脚本的执行参数(其保存在数组$argv中,从0号开始是参数),并将其保存到变量user中。
第二个参数使用Expect的spawn命令来启动脚本和命令的会话,这里启动的是chsh命令,实际上命令是以衍生子进程的方式来运行的。
参考资料来源:百度百科-SPAWN (Expect编程工具语言)
如何判断expect中调用的命令是否成功
set time 300应该是set timeout 300吧。你可以在set timeout命令前面或者后面加一条命令:log_file /tmp/expect.log复制代码然后从log里面看命令是否执行成功了。回复 1# baochenggood
expect学习之如何获取命令行参数和函数参数
比如下面脚本用来做ssh无密码登陆,自动输入确认yes和密码信息,用户名,密码,hostname通过参数来传递
ssh.exp
Python代码
#!/usr/bin/expect
set timeout 10
set username
set password
set hostname
spawn ssh-copy-id -i .ssh/id_rsa.pub $username@$hostname
expect "yes/no"
send "yes\r"
expect "password:"
send "$password\r"
expect eof
执行脚本./ssh.exp root pasword hostname1
expect接收参数的方式和bash脚本的方式不太一样,bash是通过$0 ... $n 这种方式,而expect是通过set 《变量名称》
shell脚本中,用expect命令如何实现自动远程操作,折磨我好久了..
既然$无法匹配,我觉得你完全可以单独配置一个环境变量,比如说我登录到服务器后
echo "SCPGOGOGO"
expect捕获到SCPGOGOGO 开始执行scp
expect好久不写了,不知道$?判断怎么写,如果要写我的翻书了。
当判断$?为真,然后执行send "java -jar"。不过我想在仔细思考一下可能会有更好的逻辑。
我不太稀饭expect这种交互写法。
因为有更多简单便捷的方法,不知道你为什么不用。
sshpass ssh密钥 简单点直接用sh操作ssh就可以达到你想要的效果,why死扣expect?,
各种集中式管理软件(puppet,salt,ansible...)都是为了方便远程操作管理的东西why?不用?
本来1小时解决的问题,死扣expect花了好几天,这种把一个问题发展到解决2个问题的做事方法不可取。
expect如何将命令结果赋值给变量
改成 send “exit \$ret\r” ret 变量是 ssh 到远端后shell里面定义的 (即你之前的send "ret=`echo $?`\r") ,所以要把 $ 用 \ 转意,否则 $ret 指的是 expect 里的ret变量,你在 expect 里当然没有定义过这个变量了,所以出错。
windows expect怎么使用
你是说shell的expect么,我有个ssh自动登录的脚本,你看下1. [#!/usr/bin/expect]
2. [set timeout 30]
基本上认识英文的都知道这是设置超时时间的,现在你只要记住他的计时单位是:秒
3. [spawn ssh -l username 192.168.1.1]
spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。所以不要用 “which spawn“之类的命令去找spawn命令。好比windows里的dir就是一个内部命令,这个命令由shell自带,你无法找到一个dir.com 或 dir.exe 的可执行文件。
它主要的功能是给ssh运行进程加个壳,用来传递交互指令。
4. [expect "password:"]
这里的expect也是expect的一个内部命令,有点晕吧,expect的shell命令和内部命令是一样的,但不是一个功能,习惯就好了。这个命令的意思是判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒
5. [send "ispass\r"]
这里就是执行交互动作,与手工输入密码的动作等效。
温馨提示: 命令字符串结尾别忘记加上 “\r”,如果出现异常等待的状态可以核查一下。
6. [interact]
执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行
![expect命令(expectsend命令中带[]怎么处理)](/static/images/content_image/tea-g1495b382d_1920.jpg)
更多文章:
全球新冠肺炎疫情背景下航运发展(盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行)
2026年9月7日 17:10
matlab求解带字母参数方程组(我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数)
2026年9月7日 16:30
oracle中的循环语句(下面哪个不是oracle程序设计中的循环语句 a for)
2026年9月7日 15:30
电脑里2个系统怎么删除一个(电脑开机显示有两个系统,如何删除一个)
2026年9月7日 12:20
scrollthrough意思(“scroll”是什么意思)
2026年9月7日 08:00
怎么激活keygen(注册机如何激活cad2008一个简单激活cad2008的方法)
2026年9月7日 06:30




