我可以在同一个脚本中获取ksh并期望吗?

时间:2017-08-07 17:15:11

标签: unix ksh expect

我试图在同一个脚本中使用由ksh设置的环境变量和expect命令。但是,如果我尝试同时获取它们,它就不起作用。有没有办法在同一个脚本中获取ksh并期望?

2 个答案:

答案 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)