如何在bash脚本中编写expect snippet来运行远程命令?

时间:2017-01-05 13:48:21

标签: bash expect

目前我正在运行此脚本来打印远程盒子上的目录,但我不确定此代码是否正常工作。

#!/bin/bash

PWD="test123"
ip="10.9.8.38"
user=$1
/usr/bin/expect <<EOD
spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no $user@$ip df -h
expect "*assword:"
send "$PWD\n"
interact
EOD

1 个答案:

答案 0 :(得分:2)

expect会生成一个新的子shell,因此您的本地bash变量会失去其范围,实现此目的的一种方法是将export变量设为可用于子贝壳。使用Tcl env内置函数在脚本中导入此类变量。

#!/bin/bash

export pwdir="test123"
export ip="10.9.8.38"
export user=$1
/usr/bin/expect <<EOD
spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no "$env(user)"@"$env(ip)" df -h
expect "*assword:"
send "$env(pwdir)\n"
interact
EOD

(或)如果您对使用expect直接使用#!/usr/bin/expect she-bang的#!/usr/bin/expect set pwdir [lindex $argv 0]; set ip [lindex $argv 1]; set user [lindex $argv 2]; spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no $user@$ip df -h expect "*assword:" send "$pwdir\n" interact 脚本不感兴趣,可以执行以下操作

./script.exp "test123" "10.9.8.38" "johndoe"

并以

运行脚本
@JMS\ExclusionPolicy("none")