Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

exec again

0 views
Skip to first unread message

Maxim Tyurin

unread,
Oct 9, 2007, 9:01:58 AM10/9/07
to
Hi!
Опять я и опять с exec ;)

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

Maxim Tyurin

unread,
Oct 9, 2007, 9:25:13 AM10/9/07
to
Maxim Tyurin writes:

> 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]
}
так работает

Ilya Anfimov

unread,
Oct 9, 2007, 9:36:47 AM10/9/07
to
2007-10-09, Maxim Tyurin <mrk...@bungarus.info> пишет:

> Hi!
> Опять я и опять с exec ;)
>
> Hе могу понять куда девается вывод в цикле :(

Образно говоря -- в /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.

Artem Chuprina

unread,
Oct 9, 2007, 2:22:00 PM10/9/07
to
Maxim Tyurin @ Tue, 9 Oct 2007 13:01:58 +0000 (UTC):

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

Лень оправдывает средства

0 new messages