#!/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(); my $script; open($script, ">", "/tmp/omgscript") or die $!; #$s3 = 'export HOME=\'/home/blinry/.local/share/Oh My Git/tmp/\';export PATH=\'/home/blinry/.local/share/Oh My Git/tmp/:\'"$PATH";cd \'/home/blinry/.local/share/Oh My Git/tmp/repos/yours/\' || exit 1;find . -type f -not -path \'*/\\.git/*\''; print $script $s2; close($script); $s = ""; $command = ". /tmp/omgscript" . "\necho MAGIC\n"; print $in $command; inner_while: while (true) { $line = <$out>; if ($line eq "MAGIC\n") { 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); }