Возьмите части стандартного выходного значения и поместите его в переменную массива
В настоящее время я работаю над сценарием (использующим BASH), который создает резервную копию файла VM на удаленном сервере.
Я хочу попытаться сделать сценарий немного более динамичным, имея возможность просто зацикливать каждую виртуальную машину с помощью команды show 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
1 ответ
Я думаю, вам нужно это:
$ 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.
(Игнорировать $
в подсказке; это все еще приглашение root. ТАК интерпретировал бы это как комментарий, если я использую #
на месте, если $
..)