Como executar um script Perl em um ambiente Unix do Windows?

3

Um pequeno histórico:

Estou tentando interagir com dados que salvei em arquivos Perl usando um programa que escrevi em C usando a API do Win32. O programa C está no Windows e os arquivos Perl são acessados através de uma unidade de rede mapeada em um ambiente Unix. Estou usando perlembed e estou obtendo com sucesso os dados desejados dos arquivos Perl usando o interpretador Perl embutido & Sub-rotinas Perl chamadas de C.

O problema:

Eu tenho que executar scripts Perl que já estão em vigor no lado do Unix. A função desses scripts é verificar a sintaxe dos arquivos Perl e verificá-los em um sistema de controle de revisão que estou usando. Os scripts chamam alguns comandos específicos do Unix, como pwd , que causam a quebra do programa C quando uso system(perl perl_file) . Há um pouco de código Perl legado, então eu não acho que posso modificar qualquer um dos scripts de verificação Perl que precisam ser chamados.

Minha pergunta:

Como eu sou capaz de executar um script Perl em um ambiente Unix do programa C no lado do Windows? Eu me deparei com esta pergunta sugerindo o uso de cygwin mas isso parece ser apenas mais um ambiente entre o Unix e o Windows. Eu pensei que poderia haver alguma maneira de permitir que o programa C use um shell C na unidade de rede mapeada para executar o script Perl, mas não encontrei nenhum exemplo disso em lugar algum. Ou talvez eu pudesse ter o interpretador Perl no ambiente Unix rodando o programa (usando a linha shebang)? Espero que esta não seja uma pergunta idiota. Eu trabalhei muito para manipular os dados Unix Perl do lado do Windows & é frustrante não conseguir concluir minha tarefa porque não posso executar um script Perl.

Obrigado!

    
por thomas.cloud 26.04.2013 / 05:31

1 resposta

3

Se a caixa Unix estiver executando um servidor ssh, você pode configurar um par de chaves públicas privadas na caixa Windows e adicionar a chave pública a $HOME/.ssh/authorized_keys na caixa Unix. Isso deve permitir que seu programa do Windows execute comandos ssh sem digitar uma senha.

Nesse ponto, você pode fazer algo parecido com isso no programa C:

system("ssh user@host 'perl /path/to/script.pl'");

Eu estou deixando de fora um grande número de detalhes ... você vai querer prestar atenção à segurança da conta do Windows que está chamando o arquivo perl; para executar o script sem digitar qualquer senha, você precisará manter a senha da chave ssh em branco, mas isso significa que você deseja bloquear a chave privada para que ninguém mais tenha acesso de leitura a ela, caso contrário Eve estará executando código perl arbitrário em sua caixa Unix, e isso nunca é uma coisa boa.

Para um cliente Windows SSH, eu recomendo o CopSSH; é uma das várias portas do Windows do OpenSSH; Ele lida com o gerenciamento de pares de chaves ssh de forma mais adequada que as outras portas que eu usei.

    
por 26.04.2013 / 05:47