2016-07-27 13 views
1

Ich möchte Hilfe erhalten, um meine Expect-Skript Problem zu lösen. Wenn ich den Befehl "env" auf meinem Linux-Terminal verwende, kann ich $INFO_HME als /app/informatica/etldev/9.1/server sehen.Expect Skript Umgebungsvariablen Problem

Aber ich bin nicht in der Lage, $INFO_HME es in meinem Expect-Skript zu verwenden und Fehler zu bekommen. Mein Skript unten gezeigt.

Ich nehme an, $INFO_HME wird als /app/informatica/etldev/9.1/server im lcd Befehl ersetzt.

#!/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" 

Fehlermeldung:

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) 

schätzen Tief jede Hilfe dieses Problem zu beheben.

+0

Können Sie bitte kreuzen Sie dieses mistake- per Skript senden überprüfen "lcd $ INFO_HME/infa_shared/SrcFiles \ n", denke ich richtig Variable INFA_HOME $ sein sollte. Dies ist die Variable Informatica env und muss eingerichtet werden, wenn Informatica aktiv ist. Die Variable, die Sie sehen können, ist wahrscheinlich ein Fehler. – Koushik

+0

Ich habe es überprüft. Es gibt kein Problem damit. Das Problem wurde mithilfe der folgenden Methode gelöst – aks

Antwort

2

Um eine env var in Expect (und Tcl) zu verwenden, sollten Sie $env(VARNAME) (oder $::env(VARNAME) wenn in einer Funktion) verwenden. Zum Beispiel:

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

Vielen Dank. Das Problem scheint durch die Verwendung der oben genannten Methode behoben zu werden. – aks