我试图在同一个脚本中使用由ksh设置的环境变量和expect命令。但是,如果我尝试同时获取它们,它就不起作用。有没有办法在同一个脚本中获取ksh并期望?
答案 0 :(得分:1)
执行类似
的操作#!/usr/bin/ksh
. /path/to/ksh_stuff.sh
export FOO=bar
# other ksh stuff
expect <<'END_EXPECT'
source /path/to/expect_stuff.exp
send_user "FOO is $env(FOO)\n"
# other expect stuff
END_EXPECT
在here-doc终结符(<<'END_EXPECT'
)周围添加引号意味着整个here-doc是单引号,因此ksh不会尝试对其进行任何参数替换。这是将期望脚本的变量与ksh隔离的有效方法。
答案 1 :(得分:0)
在Korn shell中,您可以使用其他脚本,例如:
. ${other_script}
这将在与父脚本相同的过程中运行。另一个脚本可以看到父脚本中定义的任何变量。如果要进行子shell(运行外部命令),则需要先导出任何变量。
如果要在expect脚本中引用环境变量(那些由子shell中运行的ksh脚本导出的那些变量),那么您的expect脚本需要引用全局数组env
。例如,如果您的ksh脚本导出MYPATH变量然后将子shell转换为expect,则expect可能会引用$env(MYPATH)