On 2/6/07, Alan Young <[EMAIL PROTECTED]> wrote: > I have a bit of perl code that I'm trying to make work: > > sub DB::get_fork_TTY { > > open my $SCREEN, qq{&3>1 screen -t 'Child $$' sh -c "tty &1>3 ; sleep > 1000000" |} > or return ''; > > my $tty = <$SCREEN>; > > return $tty; > } > > I'm getting bad file descriptor errors, so I'm assuming screen is > cleaning up what it hands to it's children. Which makes sense.
The problem is actually something else (but you're right, screen cleans up the filedescriptors): the 'screen' command in your script just tells the screen "backend" process that it should create a new window, so the new window is no child of your script and cannot share the file descriptor. > I want to avoid going the tmp file route if at all possible. Is there a > way I can echo tty's output so that I can grab it from a filehandle? You need some interprocess communication way. Some ways could be - a tmp file (but you don't like that) - a named pipe (but that's close to a tmp file) - some code using sockets (complicated) - using /proc/<pid>/<fd> to access the file descriptors of your process. But that's not very portable. Something like: open my $SCREEN, qq{screen -t 'Child $$' sh -c "tty >/proc/\$\$/fd/1 ; sleep 1000000" ; sleep 10 |} (The sleep 10 is needed to keep the process alive long enough.) Cheers, Michael. -- Michael Schroeder [EMAIL PROTECTED] main(_){while(_=~getchar())putchar(~_-1/(~(_|32)/13*2-11)*13);} _______________________________________________ screen-users mailing list screen-users@gnu.org http://lists.gnu.org/mailman/listinfo/screen-users