Hе могу понять куда девается вывод в цикле :(
И как такое объяснить:
% proc a {} {
eval exec /bin/echo bla-bla
}
% a
bla-bla
% foreach b {a b c} {
a
}
%
Если вызывать просто, то exec echo работает как положено.
Если из цикла - то вывода нет.
--
With Best Regards, Maxim Tyurin
JID: MrK...@jabber.pibhe.com
> Hi!
> Опять я и опять с exec ;)
>
> Hе могу понять куда девается вывод в цикле :(
> И как такое объяснить:
>
> % proc a {} {
> eval exec /bin/echo bla-bla
> }
> % a
> bla-bla
> % foreach b {a b c} {
> a
> }
> %
>
> Если вызывать просто, то exec echo работает как положено.
> Если из цикла - то вывода нет.
Понял где я ступил
eval возвращает stdout выполняемой команды
proc a {} {
puts [eval exec /bin/echo bla-bla]
}
так работает
Образно говоря -- в /dev/null
exec сам перехватывает stdout и возращает
его в качестве результата.
> И как такое объяснить:
>
> % proc a {} {
> eval exec /bin/echo bla-bla
> }
> % a
> bla-bla
Соответственно, интэрактивный вызов команды распечатает
её результат.
> % foreach b {a b c} {
> a
> }
Соответственно, результат вывода a никуда не присвоен, при этом
" Foreach returns an empty string." (c) Tcl manual.
MT> Hi!
MT> Опять я и опять с exec ;)
MT> Hе могу понять куда девается вывод в цикле :(
MT> И как такое объяснить:
MT> % proc a {} {
MT> eval exec /bin/echo bla-bla
MT> }
MT> % a
MT> bla-bla
MT> % foreach b {a b c} {
MT> a
MT> }
MT> %
MT> Если вызывать просто, то exec echo работает как положено.
MT> Если из цикла - то вывода нет.
exec перехватывает вывод. Просто в первом случае, поскольку у тебя
интерпретатор интерактивный, результат процедуры a тебе печатают.
foreach b {1 2 3} {puts [a]}
спасет смертельно раненого кота :-)
--
Artem Chuprina
RFC2822: <ran{}ran.pp.ru> Jabber: r...@jabber.ran.pp.ru
Лень оправдывает средства