![如何在 Windows 中在 Unix 环境中运行 Perl 脚本?](https://linux22.com/image/1361170/%E5%A6%82%E4%BD%95%E5%9C%A8%20Windows%20%E4%B8%AD%E5%9C%A8%20Unix%20%E7%8E%AF%E5%A2%83%E4%B8%AD%E8%BF%90%E8%A1%8C%20Perl%20%E8%84%9A%E6%9C%AC%EF%BC%9F.png)
一点背景知识:
我正在尝试使用我用 Win32 API 用 C 编写的程序与我保存在 Perl 文件中的数据进行交互。C 程序在 Windows 中,而 Perl 文件则通过 Unix 环境中的映射网络驱动器访问。我正在使用佩莱姆贝德并成功使用嵌入式 Perl 解释器和从 C 调用的 Perl 子程序从 Perl 文件中提取我想要的数据。
问题:
我必须运行 Unix 端已有的 Perl 脚本。这些脚本的功能是检查 Perl 文件的语法,并将它们签入我正在使用的修订控制系统。这些脚本调用一些 Unix 特定的命令,例如,当我使用时,这些命令pwd
会导致 C 程序中断system(perl perl_file)
。有相当多的遗留 Perl 代码,所以我认为我无法修改任何需要调用的 Perl 检查脚本。
我的问题:
我如何才能从 Windows 端的 C 程序在 Unix 环境中执行 Perl 脚本?我遇到了这建议使用赛格威但这似乎只是 Unix 和 Windows 之间的另一个环境。我认为可能有一些方法可以让 C 程序使用映射网络驱动器中的 C shell 来运行 Perl 脚本,但我在任何地方都找不到这方面的例子。或者我可以让 Unix 环境中的 Perl 解释器运行该程序(使用 shebang 行)?我希望这不是一个愚蠢的问题。我做了这么多工作才能从 Windows 端操纵 Unix Perl 数据,但因为无法运行 Perl 脚本而无法完成任务,这令人沮丧。
谢谢!
答案1
如果 Unix 机器正在运行 ssh 服务器,您可以在 Windows 机器上设置公钥私钥对,并将公钥添加到$HOME/.ssh/authorized_keys
Unix 机器上。这样您的 Windows 程序就可以运行 ssh 命令而无需输入密码。
此时,您可以在 C 程序中执行如下操作:
system("ssh user@host 'perl /path/to/script.pl'");
我遗漏了相当多的细节...您将需要注意调用 perl 文件的 Windows 帐户的安全性;为了在不输入任何密码的情况下运行脚本,您需要将 ssh 密钥的密码保留为空,但这意味着您要锁定私钥,以便其他任何人都无权读取它,否则 Eve 将在您的 Unix 机器上运行任意 perl 代码,这绝不是一件好事。
对于 Windows SSH 客户端,我推荐 CopSSH;它是 OpenSSH 的几个 Windows 端口之一;它比我使用过的其他端口更合理地处理 ssh 密钥对的管理。