linux expect 自动执行脚本

本文介绍了一种使用Expect脚本自动执行SSH登录及远程命令的方法,包括基本用法、参数传递、自动登录和执行特定命令的示例。特别强调了如何避免使用tmux时的vim错误,以及如何通过脚本进行自动scp文件传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

基本用法

自动登录后不影响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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值