The 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 脚本中,我能够通过声明变量然后导出它们来成功导出变量,如上面的示例所示。但我却没能有这样的运气通过bash
命令行参数变量expect