2016-07-27 334 views
1

我想接受帮助解决我的期望脚本问题。Expect脚本环境变量问题

当我在我的linux终端上使用命令“env”时,我可以看到$INFO_HME/app/informatica/etldev/9.1/server

,但我无法使用$INFO_HME它在我期待的脚本和得到错误。我的脚本如下所示。

我推测,$INFO_HME将在lcd命令中替换为/app/informatica/etldev/9.1/server

#!/usr/bin/expect 
spawn /usr/bin/sftp <ID_Here>@<Host_Here> 
expect "password:" 
send "<Password_Here>\n" 
expect "sftp>" 
send "lcd $INFO_HME/infa_shared/SrcFiles\n" 
expect "sftp>" 
send "cd \"/Source/client\"\n" 
expect "sftp>" 
send "get file.csv\n"; 
expect "sftp>" 
send "quit\n" 

错误消息:

sftp> can't read "INFO_HME": no such variable 
    while executing 
"send "lcd $INFA_HOME/infa_shared/SrcFiles\n"" 
    (file "Scr_Webcore_SFTP.sh" line 7) 

深深感谢所有帮助解决这个问题。

+0

能否请您交叉检查这mistake-按照脚本派“液晶$ INFO_HME/infa_shared/SrcFiles \ n”,我认为正确的变量应该是$ INFA_HOME。这是informatica env变量,如果您已启动并运行了信息库,则必须设置它。你可以看到的变量可能有些错误。 – Koushik

+0

我已经检查过它。这没有问题。通过使用以下方法解决问题 – aks

回答

2

要在Expect(和Tcl)中使用env var,您应该使用$env(VARNAME)(或在功能中为$::env(VARNAME))。例如:

[bash] # export FOO=bar 
[bash] # expect -c 'puts $env(FOO)' 
bar 
[bash] # expect -c 'puts $::env(FOO)' 
bar 
[bash] # 
+0

谢谢。这个问题似乎是通过使用上述方法来解决的。 – aks