linux expect 自动执行脚本

关于这个命令程序的用法网上也有很多了,有了这个脚本自动执行更加方便。这里总结自己常用的和注意事项。

基本用法

自动登录后不影响vim

#!/usr/bin/expect -f  

trap {
 set rows [stty rows]
 set cols [stty columns]
 stty rows $rows columns $cols < $spawn_out(slave,name)
} WINCH

** 注意 trap 里面是为了防止用tmux 等登录服务器使用 vim 等出现错误的情况 ** 应该是为了把窗口改变的信息传给相应程序。【猜测】

传参

set var [lindex $argv 1]  

自动登录

set user user_name
set host 1.1.1.1
set password user_pass
set timeout 30  

#spawn ssh -D $port $user@$host  
spawn lftp $user@$host

#expect "*assword:*"  
#send "$password\r"  
expect {
    "yes/no" {send "yes\r"}      
    "*assword:" {send "$password\r"}
}

登录后执行命令

expect {
    "lftp wangpengrui" {send "cd __log \r"}
}

#send "mirror 1.mrun/visual_direct/ 1.mrun\r"
send "bye\r"

演示了两种,一种等待出现然后执行,一种直接执行

执行结束

也是两种

expect eof # 直接结束交互
#interact # 转让交互给用户

示例

自动scp

2、3 个参数主要是为了支持 -r 选项,当然下面的写法只是单向的,后续如果用到双向再研究 [主要是新的脚本语法,很不熟]

#!/usr/bin/expect

if {$argc == 2} {
    #set user [lindex $argv [expr $argc-1]]
    set src  [lindex $argv 0]
    set dst  [lindex $argv 1]
    set cmd ""
} elseif {$argc==3 } {
    set cmd [lindex $argv 0]
    set src  [lindex $argv 1]
    set dst  [lindex $argv 2]
} else {
 send "argc $argc"
 exit
}

set server "xxx@xxx"
set password "xxxx"
send "scp $cmd $src $server:$dst\n"
#exit
#spawn scp $cmd $src $server:$dst
spawn sh -c "scp $cmd $src $server:$dst"

# spawn sh -c "scp $cmd $server:$src $dst" # 如果再实现判断语句

expect {
 "(yes/no)?" {
   send "yes\n"
   expect "*assword:" { send "$password\n"}
  }
  "*assword:" {
   send "$password\n"
  }
}

interact
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值