1

所以我正在为我的工作做一个开发项目,基本上这个想法是我们有一个 Excel VBA 宏,它需要对文件进行一些解析,创建一个新文件并将文件位置发送到在大型机上运行的 Unix 脚本。

每次运行宏时文件的位置都不同,并且感谢 Samba,我可以在 Windows 中创建文件,并且可以立即访问 Unix 系统。

现在问题来了:如何传入文件的位置。问题是一个名为 plink 的程序(它是 putty 的一个版本,它允许配置文件与程序本身而不是在 PC 的注册表中)是完成这项工作的唯一被批准的选项(我知道 Cgywin 会很容易做到这一点) 并且该程序位于多个人的网络驱动器上,可能需要同时运行它。authorized_keys 文件有一个 exec 指向需要运行的 Unix 脚本,出于安全原因,我无法更改它。但是,我可以在 Unix 中编写一个脚本来获取未命名的参数并使用它来运行仅将参数(文件位置)作为命名参数(--file=/directory/datafile)的脚本。

我尝试使用(在cmd中)plink.exe serverIP /directory/datafile(登录已配置)运行该脚本,但显然无法以这种方式传递参数。

我也试过 plink.exe serverIP "/directory/datafile" 也没有运气。

我只是想知道是否有一种简短而简洁的方法来完成这项工作。我们有一个具有类似配置的示例项目,但执行此操作的脚本需要 10000 行,我不想阅读,我有点相信这应该像一个 10 或 20 行的短脚本一样完成。如果需要,我可以自由创建任何 Windows 脚本,前提是我可以同时运行具有不同参数的程序的多个会话。

4

1 回答 1

3

您应该能够使用 plink 在 Unix 机器上运行命令,就像使用 ssh 在另一台 unix 机器上运行一个 unix 命令一样。例如

plink user@host "ls"

将继续ls运行host

同样地:

plink user@host "/absolute/path/to/script/on/unix/machine/script.sh"

应该运行script.shhost. 您可以在本地构建要在 unix 机器上运行的命令(包括脚本的任何参数,如数据文件的路径名),然后使用 plink 运行命令,如上所述。

如果script.sh有参数,并且它们没有被读入,请尝试将脚本名称和参数放在单引号中:

plink user@host "'/absolute/path/to/script/on/unix/machine/script.sh arg1 arg2'"

您可能想查看 plink 文档,可在此处找到:http: //the.earth.li/~sgtatham/putty/0.62/puttydoc.txt

请特别查看第 7.2.2 节 - “使用 Plink 进行自动连接”

于 2012-05-12T16:54:39.363 回答