【发布时间】:2021-04-03 19:53:54
【问题描述】:
我正在使用 expect 和 shell 代码在 CentOS 7.9 上进行 Postgres 数据库自动备份。我的代码在英语环境中运行良好,但在日语环境中失败。这是我的期望代码
#!/usr/bin/expect
set homeDirectory "/home/kds/DB_BACKUP"
set dbPassword "manager"
log_file $homeDirectory/LOG/db_backup.log;
#Execute database backup script
spawn $homeDirectory/./backupexecutor.sh
set found 0
while {$found < 1} {
expect {
"パスワード: $" {send "$dbPassword\r"}
"^Rollout Done " {set found 1}
"^Rollout Updated " {set found 1}
}
}
expect eof
检查日志文件后,很明显,expect 无法为パスワード: $ 关键字发送密码。我也试过*スワー*,但结果相同。如果将我的操作系统语言从日语更改为英语并将パスワード 替换为Password,则代码可以正常工作。有什么方法可以使用不同的语言来工作吗?
【问题讨论】:
-
我没有任何经验可以提供帮助,但
expect使用tcl,因此您可能会从其i18n 文档页面获得一些信息。确保将您在环境中设置为LANG=等的内容添加到您的帖子中,以及您的文件采用什么编码。 -
那个
$字符,它是作为您希望看到的文字字符,还是正则表达式字符串结尾锚点?如果是后者,则您缺少-re标志。 -
针对expect子句的$的推理做出回应
-
@glennjackman ,默认
expect "something"表示expect -gl "something",$也有特殊含义。 -
不正确。 glob特殊字符枚举here——
$不在其中。$仅在 regular expressions 中有特殊含义