期望脚本中的 Spawn 无权访问环境变量
Spawn in expect script do not have access to environment variable
我有一个名为 load_data.exp 的期望脚本放在主目录中
#!/usr/bin/expect
spawn osm2pgsql -s -l -d postgres -W -U postgres -H $OSM_DATABASE_PORT_5432_TCP_ADDR -P 5432 --hstore $filename
expect "Password"
send "$OSM_DATABASE_ENV_POSTGRES_PASSWORD\n"
interact
有一个环境变量 OSM_DATABASE_PORT_5432_TCP_ADDR 的值为 172.17.0.13 已通过
验证
echo $OSM_DATABASE_PORT_5432_TCP_ADDR
输出
172.17.0.13
运行 ./load_data.exp 的 load_data.exp,我得到了错误
can't read "OSM_DATABASE_PORT_5432_TCP_ADDR": no such variable
while executing
"spawn osm2pgsql -s -l -d postgres -W -U postgres -H $OSM_DATABASE_PORT_5432_TCP_ADDR -P 5432 --hstore $filename"
(file "../load_data.exp" line 4)
似乎是 spawn 无法访问环境变量 DATABASE_PORT_5432_TCP_ADDR
您可以通过以下方式将 Bash 变量传递给 Expect:
#!/usr/bin/expect
set HOST [lindex $argv 0]
set FILENAME [lindex $argv 1]
set PASSWORD [lindex $argv 2]
spawn osm2pgsql -s -l -d postgres -W -U postgres -H $HOST -P 5432 --hstore $FILENAME
expect "Password"
send "$PASSWORD\n"
interact
然后像这样调用你的 expect 脚本:
load_data.exp $OSM_DATABASE_PORT_5432_TCP_ADDR $filename $OSM_DATABASE_ENV_POSTGRES_PASSWORD
我有一个名为 load_data.exp 的期望脚本放在主目录中
#!/usr/bin/expect
spawn osm2pgsql -s -l -d postgres -W -U postgres -H $OSM_DATABASE_PORT_5432_TCP_ADDR -P 5432 --hstore $filename
expect "Password"
send "$OSM_DATABASE_ENV_POSTGRES_PASSWORD\n"
interact
有一个环境变量 OSM_DATABASE_PORT_5432_TCP_ADDR 的值为 172.17.0.13 已通过
验证echo $OSM_DATABASE_PORT_5432_TCP_ADDR
输出
172.17.0.13
运行 ./load_data.exp 的 load_data.exp,我得到了错误
can't read "OSM_DATABASE_PORT_5432_TCP_ADDR": no such variable
while executing
"spawn osm2pgsql -s -l -d postgres -W -U postgres -H $OSM_DATABASE_PORT_5432_TCP_ADDR -P 5432 --hstore $filename"
(file "../load_data.exp" line 4)
似乎是 spawn 无法访问环境变量 DATABASE_PORT_5432_TCP_ADDR
您可以通过以下方式将 Bash 变量传递给 Expect:
#!/usr/bin/expect
set HOST [lindex $argv 0]
set FILENAME [lindex $argv 1]
set PASSWORD [lindex $argv 2]
spawn osm2pgsql -s -l -d postgres -W -U postgres -H $HOST -P 5432 --hstore $FILENAME
expect "Password"
send "$PASSWORD\n"
interact
然后像这样调用你的 expect 脚本:
load_data.exp $OSM_DATABASE_PORT_5432_TCP_ADDR $filename $OSM_DATABASE_ENV_POSTGRES_PASSWORD