Захват извне — с точки зрения скрипта, выполняющего exec xterm … -into …
— чрезвычайно сложен, так как нет никаких событий, которые вы получаете, когда что-то рисует во вспомогательном окне (за исключением одного случая, когда вы на самом деле не хотите этого), и вы закончите просто увидел множество растровых изображений того, что произошло в любом случае; большой и очень малоинформативный. Вам нужно использовать другой подход; вам нужно захватить изнутри, чтобы регистрировать то, что пользователь видит на терминале. К счастью, на самом деле это не так уж сложно сделать.
Чтобы вести полный журнал того, что происходит внутри терминала (где сама терминальная программа не предлагает эту функцию), лучше всего запустить небольшой скрипт Expect внутри терминала.
package require Expect
log_file /tmp/somefile.log
spawn $env(SHELL)
interact
exit
Запустите это внутри терминала (в xterm есть возможность сделать это), и он будет записывать все, что происходит внутри. Он записывается во временный файл /tmp/somefile.log
, но при желании вы можете изменить используемое имя. Вероятно, хорошей идеей будет передать файл журнала с помощью аргумента:
package require Expect
if {$argc < 1} {
error "not enough arguments"
}
# Unlike C, Tcl doesn't include interpreter name or script name in argv
log_file [lindex $argv 0]
spawn $env(SHELL)
interact
exit
person
Donal Fellows
schedule
05.03.2014