我有一个(可能)不寻常的情况。我需要在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。)at / 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
所以我现在的安装是正确的。
有什么线索吗?
答案 0 :(得分:0)
这篇文章给了我修复它的想法。但是现在我得到了一个核心转储。 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
答案 1 :(得分:0)
正如俗话所说,我通过肘部解决问题来解决问题。
我做的是什么
- 在我的Windows框中将vmware cli安装到默认目录
- 为VMware主目录,bin目录,Perl目录和Perl / bin目录添加了环境变量
- 将这些环境变量添加到我的PATH变量中。
然后我创建了一个vmware-cli.bat文件,该文件接受参数并将它们连接到具有正确值的vmware-cli命令。例如,我将其称为列出服务器中的VM
cygwin的产品:&gt; ./vmware-cli.bat vmware-cmd.pl --server MyServer --username User --password PW -l </ p>
批处理文件中我特意做了
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%
答案 2 :(得分: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