我正在使用 VMD(一个分子动力学可视化包),我想从 Perl 脚本打开 VMD,运行 Tcl 脚本,将输出打印到日志文件,然后关闭 VMD 并返回到 Perl 脚本。执行此操作的普通语法是:
system("vmd -dispdev text -eofexit < program.tcl > LOG");
据我所知,分解如下:
system("");
:执行包含在引号中的 Bourne Shell 命令vmd
: 调用 VMD-dispdev text
: 以文本模式打开 VMD-eofexit
: 当达到 STDIN 上的 EOF 时终止 VMD< prog.tcl
:设置prog.tcl
为标准输入;prog.tcl
vmd 将在完成 时终止> LOG
: 将 STOUT 写入文件<LOG>
现在这将完美地工作,除了我的 Tcl 脚本需要参数。我想做的是:
system("vmd -dispdev text -eofexit < program.tcl string1 string2 > LOG");
但是,在这种情况下,shell 会尝试将 string1 和 string2 作为文件读取。由于我对重定向的理解有限,我不确定第一行到底发生了什么,第二行到底出了什么问题,或者什么是好的解决方案。任何帮助,将不胜感激。