2

我有一个(也许)不寻常的情况。我需要在 Windows 框中运行 VMware CLI 命令,但是通过 shell 脚本中的 cygwin CLI。我现在不能改变这个,所以任何关于“为什么不这样做”的建议可能都是徒劳的,尽管很感激。这是一个示例脚本。

#!/bin/bash
# Paths for vmware-cmd.pl file to run vmware commands from vsphere cli
_vcli_dir="/cygdrive/c/Program Files (x86)/VMware/VMware vSphere CLI"
_vcli_bin="$_vcli_dir/bin"
_vcli_perl="$_vcli_dir/Perl"
_vcli_perl_bin="$_vcli_perl/bin"
_vcli_perl_lib="$_vcli_perl/lib"
_vcli_perl_vlib="$_vcli_perl_lib/VMware"
_vcmd=vmware-cmd.pl

export _orig_path=$PATH
# Add above directories to path variable
export PATH=$PATH:$_vcli_dir:$_vcli_bin:$_vcli_perl:$_vcli_perl_bin:$_vcli_perl_lib:$_vcli_perl_vlib
echo $PATH

$_vcmd /?

export PATH=$_orig_path
echo $PATH

当我运行上面的脚本时,我得到

在 @INC 中找不到 VMware/VIRuntime.pm(@INC 包含:/usr/lib/perl5/site_perl/5.14/i686-cygwin-threads-64int /usr/lib/perl5/site_perl/5.14 /usr/lib/ perl5/vendor_perl/5.14/i686-cygwin-threads-64int /usr/lib/perl5/vendor_perl/5.14 /usr/lib/perl5/5.14/i686-cygwin-threads-64int /usr/lib/perl5/5.14 /usr/ lib/perl5/site_perl/5.10 /usr/lib/perl5/vendor_perl/5.10 /usr/lib/perl5/site_perl/5.8 .) 在 /cygdrive/c/Program Files (x86)/VMware/VMware vSphere CLI/bin/vmware -cmd.pl 第 8 行。开始失败-编译在 /cygdrive/c/Program Files (x86)/VMware/VMware vSphere CLI/bin/vmware-cmd.pl 第 8 行中止。

我可以从 DOS 命令提示符运行相同的 vmware-cmd.pl 脚本

c:> vmware-cm.pl

所以我现在我的安装是正确的。

请问有什么线索吗?

4

3 回答 3

0

这篇文章给了我修复它的想法。但现在我得到了一个核心转储。 Perl 的@INC 是如何构造的?(又名影响 Perl 模块搜索位置的所有方法是什么?)

添加的行是第二个导出 PERL5LIB 行。

#!/bin/bash
# Path for vmware-cmd.pl file to run vmware commands from vsphere cli
_vcli_dir="/cygdrive/c/Program Files (x86)/VMware/VMware vSphere CLI"
_vcli_bin="$_vcli_dir/bin"
_vcli_perl="$_vcli_dir/Perl"
_vcli_perl_bin="$_vcli_perl/bin"
_vcli_perl_lib="$_vcli_perl/lib"
_vcli_perl_vlib="$_vcli_perl_lib/VMware"
_vcmd=vmware-cmd.pl

export _orig_path=$PATH
# Add above directories to path variable
export PATH=$PATH:$_vcli_dir:$_vcli_bin:$_vcli_perl:$_vcli_perl_bin:$_vcli_perl_lib:$_vcli_perl_vlib
export PERL5LIB=$_vcli_dir:$_vcli_bin:$_vcli_perl:$_vcli_perl_bin:$_vcli_perl_lib:$_vcli_perl_vlib
echo $PATH

$_vcmd /?

export PATH=$_orig_path
echo $PATH
于 2013-03-21T17:17:15.893 回答
0

俗话说,我通过肘部到达我的**来解决。

我所做的是
- 在我的 Windows 机器上将 vmware cli 安装到默认目录
- 为 VMware 主目录、bin 目录、Perl 目录和 Perl/bin 目录
添加环境变量 - 将这些环境变量添加到我的 PATH 变量中。

然后我创建了一个 vmware-cli.bat 文件,该文件接受参数并将它们连接到具有正确值的 vmware-cli 命令中。例如,我调用它来列出服务器中的虚拟机

cygwin:> ./vmware-cli.bat vmware-cmd.pl --server MyServer --username User --password PW -l

在我essentailly做的批处理文件中

REM Get first parm as the command, and then concatenate the rest of the parms
set VCLI_CMD=%1
shift
:LOOP
if %1x==x goto :EXECUTE
set VCLI_CMD=%VCLI_CMD% %1
shift
goto LOOP:

:EXECUTE
%VCLI_CMD%
于 2013-09-27T00:58:55.157 回答
0

这是上一篇文章的替代方法,可让您将其保存在同一个 shell 脚本中

VIMCMD="/cygdrive/C/Program Files (x86)/VMware/VMware vSphere CLI/bin/vmware-cmd.pl"
VIMCMD_DOS=$(cygpath -d "$VIMCMD")
DOS_VIMCMD="cmd /c $VIMCMD_DOS"

然后你可以运行:

$ $DOS_VIMCMD --version
vSphere SDK for Perl version: 6.0.0
Script 'vmware-cmd.pl' version: 6.0.0
于 2016-07-08T13:17:23.133 回答