echo
测试显示我的命令行变量正在工作,但我如何传递它们、导出它们以用于嵌入式expect
?
#!/bin/bash
echo name of script is $0
echo host is $1
echo hostusername is $2
echo hostpassword is $3
expect -c 'spawn ssh -l $2 $1 < ./sf-wall_scp_bash.sh
sleep 2
expect {
"(yes/no)? " {send "yes\n"}
exp_continue
}
expect {
"?assword" {send "$3\r"}
}
sleep 1
'
expect
如果使用shebang调用,它的工作方式类似于
#!/usr/bin/expect
set host [lindex $argv 0]
set hostusername [lindex $argv 1]
set hostpassword [lindex $argv 2]
spawn ssh -l $hostusername $host
sleep 2
expect {
"(yes/no)? " {send "yes\n"}
exp_continue
}
expect {
"?assword" {send "$hostpassword\r"}
}
sleep 1
...按预期工作。我需要使用bash
并嵌入expect
,因为脚本需要调用 bash 特定的命令、函数、内置变量……否则简单地使用第二个示例将是一个可行的选项,但事实并非如此。
我尝试过声明和导出命令行参数变量,并将上面第一个示例中的 $1、$2、$3 分别更改为声明和导出的变量名,这在我拥有的另一个脚本中有效,我实际上在其中声明了变量脚本......不同之处在于它们不是命令行参数。
host=$1
export host
hostusername=$2
export hostusername
hostpassword=$3
export hostpassword
以及只是导出它们
export host
export hostusername
export hostpassword
并尝试上面的第一个示例。没有变化,expect
继续索赔
无法读取“X”:没有这样的变量
在另一个 bash 脚本中,我能够通过 BOTH 声明变量然后像上面的示例中那样导出它们来成功导出变量。但是我无法通过将bash
命令行参数变量传递给expect