EVOLUTION-MANAGER
Edit File: MSCmd.pm
package Net::OpenSSH::ShellQuoter::MSCmd; use strict; use warnings; use Carp; sub new { shift() } sub quote { shift; my $arg = shift; if ($arg =~ /[\r\n\0]/) { croak "can't quote newlines to pass through MS cmd.exe"; } $arg =~ s/([()%!^"<>&|])/^$1/g; $arg; } *quote_glob = \"e; my %fragments = ( stdin_discard => '<NUL:', stdout_discard => '>NUL:', stderr_discard => '2>NUL:', stdout_and_stderr_discard => '>NUL: 2>&1', stderr_to_stdout => '2>&1' ); sub shell_fragments { shift; my @f = grep defined, @fragments{@_}; wantarray ? @f : join(' ', @f); } 1; __END__ =head1 NAME Net::OpenSSH::ShellQuoter::MSCmd - Quoter for Windows cmd.exe =head1 DESCRIPTION This quoter is intended for interaction with SSH servers running on Windows which invoke the requested commands through the C<cmd.exe> shell. Because of C<cmd.exe> not doing wildcard expansion (on Windows this task is left to the final command), glob quoting just quotes everything. Some Windows servers use C<Win32::CreateProcess> to run the C<cmd.exe> shell which runs the requested command. In that case, both the C<MSCmd> and C<MSWin> quoters have to be chained (and BTW, order matters): $ssh = Net::OpenSSH->new(..., remote_shell => 'MSCmd,MSWin'); Actually, C<cmd.exe> may require not quoting at all when the requested command is a builtin (for instance, C<echo>). =head1 COPYRIGHT AND LICENSE Copyright (C) 2008-2014 by Salvador FandiE<ntilde>o (sfandino@yahoo.com) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.10.0 or, at your option, any later version of Perl 5 you may have available. =cut