2016-07-27 2 views
1

Я хотел бы получить помощь для решения проблемы с ожидаемым сценарием.Ожидать изменения переменной окружения скрипта

, когда я использую команду env на моем терминале linux, я вижу $INFO_HME как /app/informatica/etldev/9.1/server.

Но я не могу использовать $INFO_HME его в сценарии ожидания и получении ошибки. Мой сценарий показан ниже.

Предполагаю, $INFO_HME будет заменен как /app/informatica/etldev/9.1/server в команде lcd.

#!/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 \ п», я думаю, правильно переменная должна быть $ INFA_HOME. Это переменная informatica env и должна быть настроена, если у вас есть информационная система. Переменная, которую вы видите, вероятно, имеет некоторую ошибку. – Koushik

+0

Я проверил его. С этим нет никаких проблем. Проблема решена с использованием метода ниже: – aks

ответ

2

Чтобы использовать env var в Expect (и Tcl), вы должны использовать $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

Смежные вопросы