获取部分标准输出值并将其放入数组变量中



我目前正在编写一个脚本(使用 BASH),该脚本将 VM 文件备份到远程服务器。

我想尝试通过能够从"show VM 命令"循环遍历每个 VM,使脚本更加动态。 我的想法是获取显示所有 VM 的命令的标准输出,并将其分解并转换为有用的变量。 可能是多阵列。

输出是这样的,无论如何都要把它全部分解吗? 说空格和换行符?

Vmid         Name                                  File                                  Guest OS           Version   Annotation
10     FREEPBX             [datastore2] FREEPBX/FREEPBX.vmx                       other26xLinux64Guest      vmx-08              
13     AdaptivNICE2Cloud   [datastore2] AdaptivNICE2Cloud/AdaptivNICE2Cloud.vmx   other26xLinux64Guest      vmx-08              
15     IVSTelManager       [datastore2] IVSTelManager/IVSTelManager.vmx           debian6Guest              vmx-08              
4      Neptune             [datastore1] Neptune/Neptune.vmx                       winNetEnterprise64Guest   vmx-08              
9      Kayako              [datastore2] Kayako/Kayako.vmx                         other26xLinux64Guest      vmx-08 

我想你需要这个:

$ vim-cmd vmsvc/getallvms | sed -n 's|.*[|/vmfs/volumes/|;s|] *|/|;s|.vmx .*|.vmx|p'
/vmfs/volumes/datastore2/FREEPBX/FREEPBX.vmx                                    
/vmfs/volumes/datastore2/AdaptivNICE2Cloud/AdaptivNICE2Cloud.vmx                
/vmfs/volumes/datastore2/IVSTelManager/IVSTelManager.vmx                        
/vmfs/volumes/datastore1/Neptune/Neptune.vmx                                    
/vmfs/volumes/datastore2/Kayako/Kayako.vmx                         
# Prints all VMX files paths

$ vim-cmd vmsvc/getallvms | sed -n 's|.*[|/vmfs/volumes/|;s|] *|/|;s|/[^/]*.vmx .*||p'
/vmfs/volumes/datastore2/FREEPBX
/vmfs/volumes/datastore2/AdaptivNICE2Cloud
/vmfs/volumes/datastore2/IVSTelManager
/vmfs/volumes/datastore1/Neptune
/vmfs/volumes/datastore2/Kayako
# Prints all directories having VMX files. These directories also contain the virtual HDDs, which you would want to backup.

(忽略提示符中的$;它仍然是根提示符。所以如果我使用#,它会将其解释为评论,如果$.

相关内容

  • 没有找到相关文章

最新更新