Linux expect脚本中的Spawn无权访问环境变量

Linux expect脚本中的Spawn无权访问环境变量,linux,bash,expect,Linux,Bash,Expect,我在主目录中有一个名为load_data.exp的expect脚本 #!/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_D

我在主目录中有一个名为load_data.exp的expect脚本

#!/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\u data.exp by./load\u 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无法访问环境变量数据库\u PORT\u 5432\u TCP\u 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

可以通过以下方式将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