我有一个名为test.sh
的脚本。
包含函数as,
APPFE_Routes()
{
set filename [lindex $argv 0]
expect -c '
spawn ssh admin@10.43.67.18
expect "Password: "
send "Admin@1234\r"
expect "~]$"
send "su\r"
expect "Password: "
send "500tps\r"
expect "]#"
send "put ifconfig grep -i $filename\r"
expect -re "]#"
send "exit\r"
'
}
我在test.sh
脚本中调用它。
APPFE_Routes mkt mkt1
我希望这些mkt
和mkt1
变量通过expect脚本函数
通过上面的代码。
我无法得到相同的结果。 其实我将这些变量从一个文件转换为shell,然后需要传递给shell中的期望函数。 不需要单独的期望脚本。 解决方案非常受欢迎。
答案 0 :(得分:1)
我打算建议你做
shell_func() {
expect -c '
your expect code
' "$@"
}
但期望在-c
$ expect -c 'puts [join $argv \n]' foo bar baz
can't read "argv": no such variable
while executing
"join $argv \n"
invoked from within
"puts [join $argv \n]"
couldn't read file "foo": no such file or directory
所以我建议你把shell函数的参数放在期望的环境中:
APPFE_Routes()
{
FILENAME="$1" expect -c '
puts "hello $env(FILENAME)"
'
}
APPFE_Routes world
hello world
答案 1 :(得分:0)
tclsh
,那么您可以将shebang设置为#!/ usr / bin / tclsh,然后根据需要编写TCL。
如果你想坚持使用POSIX shell代码,那么set
语句可能应该是:
filename="$1"
答案 2 :(得分:0)
嗨glenn jackman和ALL,
感谢您的所有回复。在大家的帮助下完成了我的工作。
但我做了别的事来避免这个问题。
code
APPFE_IP = $ {lines_ary [I]};
SIG_IP = $ {lines_ary第[i + 1]};
SIG_Gateway = $ {lines_ary第[i + 2]};
APP_IP = $ {lines_ary第[i + 3]};
APP_GATEWAY = $ {lines_ary第[i + 4]};
RDS1_IP = $ {lines_ary第[i + 5]};
RDS1_APP = $ {lines_ary第[i + 6]};
RDS1_GATEWAY = $ {lines_ary第[i + 7]};
网络连接
###### APPFE路由到RDS1{
/ usr / bin / expect<< EOF
spawn ssh admin @ $ APPFE_IP
期待“密码:”
发送“Admin @ 1234 \ r”
期待-re“〜] $”
发送“su - \ r”
期待“密码:”
发送“500tps \ r”
期待-re“〜]#”
发送“route add -host $ RDS1_APP gw $ APP_GATEWAY \ r”
期待-re“〜]#”
发送“exit \ r”
EOF
}
code