#!/usr/bin/env perl use IPC::Open3; use IO::Socket; my $bash = "bash"; if ($#ARGV >= 0) { $bash = $ARGV[0]; } my $pid = open3(my $in, my $out, my $err, $bash); $socket = IO::Socket::INET->new(PeerAddr => "127.0.0.1", PeerPort => 6666, Proto => "tcp", Type => SOCK_STREAM); print $in 'export PATH="/usr/bin:/mingw64/bin:$PATH"' . "\n"; while(true) { #STDOUT->flush(); my $len; $socket->recv($len, 4); my $actual_len = unpack("L", $len); if ($actual_len == 0) { #print("not connected"); exit; } #print("still connected"); my $s2; $socket->recv($s2, $actual_len); #print($s2); STDOUT->flush(); $s = ""; $command = $s2 . "\necho -e \"\\v\"\n"; print $in $command; inner_while: while (true) { $line = <$out>; if ($line =~ s/\cK//) { STDOUT->flush(); last inner_while; } $s = $s . $line; } #print "got complete output"; #print $s; #print length($s); STDOUT->flush(); my $send_length = pack("L", length($s)); $socket->send($send_length); $socket->send($s); my $exit_code = pack("L", 0); $socket->send($exit_code); }