从matlab运行TCL脚本

时间:2014-06-09 22:42:52

标签: matlab tcl environment-variables

我希望直接在matlab中运行TCL脚本。 我的问题是我使用的是名为ParFlow的水文模型。因此我需要加载库:

lappend auto_path $env(PARFLOW_DIR)/bin
package require parflow
namespace import Parflow::*

但是当我在matlab上运行unix('tclsh Run.tcl')时,我遇到$env(PARFLOW_DIR)的问题:

no such variable
    (read trace on "env(PARFLOW_DIR)")
    invoked from within
"lappend auto_path $env(PARFLOW_DIR)/bin "
    (file "Run.tcl" line 6)

我试图像这样使用直接路径到bin:

lappend auto_path /home/raphael/parflow/parflow/bin

但后来又出现了另一个错误:

error reading package index file /home/raphael/parflow/parflow/bin/pkgIndex.tcl: can't read "::env(PARFLOW_DIR)": no such variable

有没有办法定义$env(PARFLOW_DIR)?我真的不明白它如何加载库或它是如何工作的? 有什么想法吗?

1 个答案:

答案 0 :(得分:1)

全局env数组包含进程的环境变量。这些可以在程序运行期间(通过写入该数组)或在开始运行的过程之前通过用于设置环境变量的任何机制来设置。在Matlab中,您使用setenv

setenv('PARFLOW_DIR', '/home/raphael/parflow/parflow')

在Tcl中,相同的事情(进入脚本的 top )是:

set ::env(PARFLOW_DIR) /home/raphael/parflow/parflow

请记住,一旦启动进程,它就不再在其父进程中看到对环境变量的任何更改;子进程继承父进程启动它时定义的任何内容。