Я работаю с VMD (пакет визуализации молекулярной динамики), и я хочу открыть VMD из сценария Perl, запустить сценарий Tcl, распечатать вывод в файл журнала, затем закрыть VMD и вернуться к сценарию Perl. Обычный синтаксис для этого:
system("vmd -dispdev text -eofexit < program.tcl > LOG");
который, насколько я понимаю, распадается следующим образом:
system("");
: выполняет команды Bourne Shell, заключенные в кавычкиvmd
: вызывает VMD-dispdev text
: открывает VMD в текстовом режиме-eofexit
: завершает VMD при достижении EOF на STDIN< prog.tcl
: устанавливаетprog.tcl
как STDIN; vmd прекратит работу, когда завершитсяprog.tcl
> LOG
: записывает STOUT в файл<LOG>
Теперь это будет работать отлично, за исключением того, что мой сценарий Tcl принимает аргументы. Я бы хотел сделать что-то вроде:
system("vmd -dispdev text -eofexit < program.tcl string1 string2 > LOG");
однако в этом случае оболочка пытается прочитать строку 1 и строку 2 как файлы. С моим ограниченным пониманием перенаправления я не уверен в точности, что происходит в первой строке, что именно идет не так во второй или в каком будет хорошее решение. Любая помощь будет оценена.