期望使用 SJWS wadm 命令
Expect with SJWS wadm command
我正在以非常传统的匹配字符串方式使用 expect,在环绕 iplanet/SJWS wadm 命令的 bash 脚本中发送所需的输入,它本身就是一个 bash 脚本调用 java 程序。
而不是当我手动 运行 程序时,某些组件(例如密码)会回显到 shell 并且似乎不会发送控制字符。
我认为这可能是多行正则表达式问题,但在 expect 前面使用通配符似乎不起作用,并且使用调试选项(发送密码字符串时)有 expect 比较密码与我想要匹配的字符串。
我对 expect 没有太多经验,希望之前是否有人见过这个问题。
谢谢
假设:
- 您使用的是Unix环境;
- 你没问题运行使用 expect 文件,而不是 expect 一行代码;
- 您 运行 来自
wadm
脚本所在路径的以下脚本;
这可能会满足您的需求:
reset.exp
#!/usr/bin/expect
if {$argc != 1} {
puts "Usage: expect $argv0 password"
exit 1
}
set PASSWD [lindex $argv 0] ;# get password from the first argument
spawn -noecho $env(SHELL) ;# spawn a new process, in order to use send/expect
set timeout 10 ;# short one (10 s)
log_user 0 ;# disable showing up sensitive info (PASSWD value)
set cmd "wadm reset-admin-password" ;# put the command string into a variable
send "$cmd\r"
expect {
-regex "enter admin-password.*$" {
puts "Got the password request ..."
}
timeout {
puts "ERROR: Timeout reached during running $cmd !"
exit 1
}
}
send "$PASSWD\r"
expect {
-regex "enter admin-password again.*$" {
send "$PASSWD\r"
expect -re ".*$"
# TODO: define reject/accept patterns
puts "Password accepted!"
}
timeout {
puts "ERROR: Timeout reached on entering password!"
exit 1
}
}
send "exit\r"
expect eof
并设法解决了问题,wadm 命令似乎建立了一个 soap 连接,这会减慢速度,所以
/usr/bin/expect << EOD
set password $PASSWD
spawn $BINDIR/wadm reset-admin-password
sleep 1
expect -re ".*admin-password> " {send -- "$password\r"}
expect -re ".*admin-password again> " {send -- "$password\r"}
expect -re ".*CLI" {send -- "exit\r"}
interact
EOD
感谢您的帮助!
我正在以非常传统的匹配字符串方式使用 expect,在环绕 iplanet/SJWS wadm 命令的 bash 脚本中发送所需的输入,它本身就是一个 bash 脚本调用 java 程序。
而不是当我手动 运行 程序时,某些组件(例如密码)会回显到 shell 并且似乎不会发送控制字符。
我认为这可能是多行正则表达式问题,但在 expect 前面使用通配符似乎不起作用,并且使用调试选项(发送密码字符串时)有 expect 比较密码与我想要匹配的字符串。
我对 expect 没有太多经验,希望之前是否有人见过这个问题。
谢谢
假设:
- 您使用的是Unix环境;
- 你没问题运行使用 expect 文件,而不是 expect 一行代码;
- 您 运行 来自
wadm
脚本所在路径的以下脚本;
这可能会满足您的需求:
reset.exp
#!/usr/bin/expect
if {$argc != 1} {
puts "Usage: expect $argv0 password"
exit 1
}
set PASSWD [lindex $argv 0] ;# get password from the first argument
spawn -noecho $env(SHELL) ;# spawn a new process, in order to use send/expect
set timeout 10 ;# short one (10 s)
log_user 0 ;# disable showing up sensitive info (PASSWD value)
set cmd "wadm reset-admin-password" ;# put the command string into a variable
send "$cmd\r"
expect {
-regex "enter admin-password.*$" {
puts "Got the password request ..."
}
timeout {
puts "ERROR: Timeout reached during running $cmd !"
exit 1
}
}
send "$PASSWD\r"
expect {
-regex "enter admin-password again.*$" {
send "$PASSWD\r"
expect -re ".*$"
# TODO: define reject/accept patterns
puts "Password accepted!"
}
timeout {
puts "ERROR: Timeout reached on entering password!"
exit 1
}
}
send "exit\r"
expect eof
并设法解决了问题,wadm 命令似乎建立了一个 soap 连接,这会减慢速度,所以
/usr/bin/expect << EOD
set password $PASSWD
spawn $BINDIR/wadm reset-admin-password
sleep 1
expect -re ".*admin-password> " {send -- "$password\r"}
expect -re ".*admin-password again> " {send -- "$password\r"}
expect -re ".*CLI" {send -- "exit\r"}
interact
EOD
感谢您的帮助!