【问题标题】:Need to solve "Can't locate VMware/VIRuntime.pm" in cygwin需要解决cygwin中“找不到VMware/VIRuntime.pm”
【发布时间】:2013-03-21 16:36:43
【问题描述】:

我有一个(也许)不寻常的情况。我需要在 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 行。开始 failed——编译在 /cygdrive/c/Program Files 中止 (x86)/VMware/VMware vSphere CLI/bin/vmware-cmd.pl 第 8 行。

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

c:> vmware-cm.pl

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

请问有什么线索吗?

【问题讨论】:

    标签: vmware


    【解决方案1】:

    这篇文章给了我修复它的想法。但现在我得到了一个核心转储。 How is Perl's @INC constructed? (aka What are all the ways of affecting where Perl modules are searched for?)

    添加的行是第二个导出 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
    

    【讨论】:

      【解决方案2】:

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

      我所做的是
      - 在我的 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

      在我必须做的批处理文件中

      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%
      

      【讨论】:

        【解决方案3】:

        这是上一篇文章的替代方法,可让您将其保留在同一个 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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-03
          • 1970-01-01
          • 2015-03-21
          • 2021-10-12
          • 2017-09-25
          相关资源
          最近更新 更多