Главная страница


ru.unix

 
 - RU.UNIX ----------------------------------------------------------------------
 From : Valentin Nechayev                    2:5020/400     04 Jun 2002  22:39:54
 To : eugen@grosbein.pp.ru
 Subject : Re: shell question
 -------------------------------------------------------------------------------- 
 
 >>> Eugene Grosbein wrote:
 
 > #!/bin/sh
 > 
 > echo RIGHT | (
 >   v=notfound
 >   while read name
 >   do
 >     v=$name
 >   done
 >   echo debug: $v 1>&2
 >   echo $v
 >   ) | read v
 > echo final: $v
 > 
 > Выдает:
 > 
 > debug: RIGHT
 > final:
 > 
 > Почему не срабатывает такой способ передачи данных из subshell наверх?
 
 Совершенно стандартная грабля. Шелл не может справиться в одном
 процессе со сложностью ситуации и порождает субпроцесс.
 
 Вот вывод ktrace:
 
   1002 ktrace   CALL  execve(0xbfbff70c,0xbfbffbd8,0xbfbffbe4)
   1002 ktrace   NAMI  "/bin/sh"
   1002 sh       RET   execve 0
 [...]
   1002 sh       CALL  fork
   1002 sh       RET   fork 1005/0x3ed
   1002 sh       CALL  close(0x4)
   1002 sh       RET   close 0
   1002 sh       CALL  close(0xffffffff)
   1002 sh       RET   close -1 errno 9 Bad file descriptor
   1002 sh       CALL  getpgrp
   1002 sh       RET   getpgrp 1002/0x3ea
   1002 sh       CALL  wait4(0xffffffff,0xbfbffadc,0x2,0)
   1003 sh       RET   fork 0
 [...]
   1003 sh       CALL  exit(0)
   1002 sh       RET   wait4 1003/0x3eb
   1002 sh       CALL  wait4(0xffffffff,0xbfbffadc,0x2,0)
   1004 sh       RET   fork 0
 [...]
 
 Hа bash то же самое с мелкими изменениями.
 Интересно, что $$ во всех этих субпроцессах тот же, что и в начальном.
 
 Workaround - передавать через файл. Иных вариантов фактически нет.
 Hу или выбрось каку и пиши на каком-нибудь перле.
 /netch
 --- ifmail v.2.15dev5
  * Origin: Dark side of coredump (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: shell question   Valentin Nechayev   04 Jun 2002 22:39:54 
 Re: shell question   Vasily Korytov   04 Jun 2002 23:30:43 
Архивное /ru.unix/7368fe2a27a1.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional