diff --git a/VBoxManage b/VBoxManage index a10ae10..174e175 100644 --- a/VBoxManage +++ b/VBoxManage @@ -6,6 +6,11 @@ # License: 3-clause BSD-style license (see LICENSE file) # Version: 6.1.0 +# define the real sed command to use. GNU sed is needed +_vbmc_sed() { + sed "$ @" +} + _VBoxManage() { local cur prev opts cmd subcommand tmp items name index result @@ -65,10 +70,10 @@ _VBoxManage() { hdds=$(VBoxManage list hdds | \ grep -A 1 'normal (base)' | \ grep "Location:" | \ - sed 's/Location:\s\+//' | \ - sed 's/\s/\\ /g' | \ + _vbmc_sed 's/Location:\s\+//' | \ + _vbmc_sed 's/\s/\\ /g' | \ tr '\n' '|' | \ - sed 's/|$//') + _vbmc_sed 's/|$//') IFS='|' read -ra hdds <<< "$hdds" for item in "${hdds[@]}" @@ -83,10 +88,10 @@ _VBoxManage() { floppies=$(VBoxManage list floppies | \ grep "Location:" | \ - sed 's/Location:\s\+//' | \ - sed 's/\s/\\ /g' | \ + _vbmc_sed 's/Location:\s\+//' | \ + _vbmc_sed 's/\s/\\ /g' | \ tr '\n' '|' | \ - sed 's/|$//') + _vbmc_sed 's/|$//') IFS='|' read -ra floppies <<< "$floppies" for item in "${floppies[@]}" @@ -101,10 +106,10 @@ _VBoxManage() { dvds=$(VBoxManage list dvds | \ grep "Location:" | \ - sed 's/Location:\s\+//' | \ - sed 's/\s/\\ /g' | \ + _vbmc_sed 's/Location:\s\+//' | \ + _vbmc_sed 's/\s/\\ /g' | \ tr '\n' '|' | \ - sed 's/|$//') + _vbmc_sed 's/|$//') IFS='|' read -ra dvds <<< "$dvds" for item in "${dvds[@]}" @@ -130,16 +135,16 @@ _VBoxManage() { running_vms=$(VBoxManage list runningvms | \ awk -F ' {' '{ print $1 }' | \ tr '\n' '|' | \ - sed 's/|$//' | \ - sed 's/"//g') + _vbmc_sed 's/|$//' | \ + _vbmc_sed 's/"//g') IFS='|' read -ra running_vms <<< "$running_vms" fi vms=$(VBoxManage list $command | \ awk -F ' {' '{ print $1 }' | \ tr '\n' '|' | \ - sed 's/|$//' | \ - sed 's/"//g') + _vbmc_sed 's/|$//' | \ + _vbmc_sed 's/"//g') IFS='|' read -ra vms <<< "$vms" for item in "${vms[@]}" do @@ -162,10 +167,10 @@ _VBoxManage() { vms=$(VBoxManage list vms -l | \ egrep '^Name|State' | \ egrep -B1 'State:\s+saved' | \ - grep Name |sed 's/Name:\s\+//' | \ + grep Name |_vbmc_sed 's/Name:\s\+//' | \ tr '\n' '|' | \ - sed 's/|$//' | \ - sed 's/"//g') + _vbmc_sed 's/|$//' | \ + _vbmc_sed 's/"//g') IFS='|' read -ra vms <<< "$vms" for item in "${vms[@]}" do @@ -179,9 +184,9 @@ _VBoxManage() { list=$(VBoxManage list groups | \ tr '\n' '|' | \ - sed 's/|$//' | \ - sed 's/\s/\\ /g'| \ - sed 's/"//g') + _vbmc_sed 's/|$//' | \ + _vbmc_sed 's/\s/\\ /g'| \ + _vbmc_sed 's/"//g') IFS='|' read -ra list <<< "$list" for item in "${list[@]}" @@ -196,9 +201,9 @@ _VBoxManage() { list=$(VBoxManage list ostypes | \ egrep ^ID: | \ - sed 's/ID:\s\+//' | \ + _vbmc_sed 's/ID:\s\+//' | \ tr '\n' '|' | \ - sed 's/|$//') + _vbmc_sed 's/|$//') IFS='|' read -ra list <<< "$list" for item in "${list[@]}" @@ -213,10 +218,10 @@ _VBoxManage() { list=$(VBoxManage list dhcpservers | \ grep NetworkName: | \ - sed 's/NetworkName:\s\+//' | \ - sed 's/\s/\\ /g'| \ + _vbmc_sed 's/NetworkName:\s\+//' | \ + _vbmc_sed 's/\s/\\ /g'| \ tr '\n' '|' | \ - sed 's/|$//') + _vbmc_sed 's/|$//') IFS='|' read -ra list <<< "$list" for item in "${list[@]}" @@ -231,10 +236,10 @@ _VBoxManage() { list=$(VBoxManage list hostonlyifs | \ egrep ^Name: | \ - sed 's/Name:\s\+//' | \ - sed 's/\s/\\ /g'| \ + _vbmc_sed 's/Name:\s\+//' | \ + _vbmc_sed 's/\s/\\ /g'| \ tr '\n' '|' | \ - sed 's/|$//') + _vbmc_sed 's/|$//') IFS='|' read -ra list <<< "$list" for item in "${list[@]}" @@ -253,8 +258,8 @@ _VBoxManage() { awk -F ',' '{print $1}' | \ awk -F '=' '{print $2}' | \ tr '\n' '|' | \ - sed 's/|$//' | \ - sed 's/\s/\\ /g') + _vbmc_sed 's/|$//' | \ + _vbmc_sed 's/\s/\\ /g') IFS='|' read -ra rules <<< "$rules" for item in "${rules[@]}" @@ -295,7 +300,7 @@ _VBoxManage() { devs=$(VBoxManage controlvm "${name//\\/}" \ webcam list | \ tr '\n' ' ' | \ - sed 's/|s$//') + _vbmc_sed 's/|s$//') read -ra devs <<< "$devs" for item in "${devs[@]}" @@ -312,7 +317,7 @@ _VBoxManage() { devs=$(VBoxManage list webcams | \ grep dev | \ tr '\n' ' ' | \ - sed 's/|s$//') + _vbmc_sed 's/|s$//') read -ra devs <<< "$devs" for item in "${devs[@]}" @@ -323,7 +328,7 @@ _VBoxManage() { _list_comp() { local list - list=$(VBoxManage list | sed -e '1,2d' \ + list=$(VBoxManage list | _vbmc_sed -e '1,2d' \ -e 's/VBoxManage list //' \ -e 's/[\[\]\|]/ /g' \ -e 's/|/ /g'|xargs echo) @@ -338,10 +343,10 @@ _VBoxManage() { folders=$(VBoxManage showvminfo ${vm} --machinereadable | \ grep SharedFolderName | \ awk -F= '{print $2}' | \ - sed 's/\s/\\ /g'| \ + _vbmc_sed 's/\s/\\ /g'| \ tr '\n' '|' | \ - sed 's/|$//' | \ - sed 's/"//g') + _vbmc_sed 's/|$//' | \ + _vbmc_sed 's/"//g') IFS='|' read -ra folders <<< "$folders" for item in "${folders[@]}" @@ -356,10 +361,10 @@ _VBoxManage() { list=$(VBoxManage list natnets | \ grep NetworkName: | \ - sed 's/NetworkName:\s\+//' | \ - sed 's/\s/\\ /g'| \ + _vbmc_sed 's/NetworkName:\s\+//' | \ + _vbmc_sed 's/\s/\\ /g'| \ tr '\n' '|' | \ - sed 's/|$//') + _vbmc_sed 's/|$//') IFS='|' read -ra list <<< "$list" for item in "${list[@]}" @@ -374,10 +379,10 @@ _VBoxManage() { list=$(VBoxManage list bridgedifs | \ egrep ^Name: | \ - sed 's/Name:\s\+//' | \ - sed 's/\s/\\ /g'| \ + _vbmc_sed 's/Name:\s\+//' | \ + _vbmc_sed 's/\s/\\ /g'| \ tr '\n' '|' | \ - sed 's/|$//') + _vbmc_sed 's/|$//') IFS='|' read -ra list <<< "$list" for item in "${list[@]}" @@ -392,10 +397,10 @@ _VBoxManage() { list=$(VBoxManage list intnets| \ egrep ^Name: | \ - sed 's/Name:\s\+//' | \ - sed 's/\s/\\ /g'| \ + _vbmc_sed 's/Name:\s\+//' | \ + _vbmc_sed 's/\s/\\ /g'| \ tr '\n' '|' | \ - sed 's/|$//') + _vbmc_sed 's/|$//') IFS='|' read -ra list <<< "$list" for item in "${list[@]}" @@ -438,10 +443,10 @@ _VBoxManage() { providers=$(VBoxManage list cloudproviders | \ grep "Short Name:" | \ - sed 's/Short Name:\s\+//' | \ - sed 's/\s/\\ /g' | \ + _vbmc_sed 's/Short Name:\s\+//' | \ + _vbmc_sed 's/\s/\\ /g' | \ tr '\n' '|' | \ - sed 's/|$//') + _vbmc_sed 's/|$//') IFS='|' read -ra providers <<< "$providers" for item in "${providers[@]}" @@ -456,10 +461,10 @@ _VBoxManage() { profiles=$(VBoxManage list cloudprofiles | \ grep "Name:" | \ - sed 's/Name:\s\+//' | \ - sed 's/\s/\\ /g' | \ + _vbmc_sed 's/Name:\s\+//' | \ + _vbmc_sed 's/\s/\\ /g' | \ tr '\n' '|' | \ - sed 's/|$//') + _vbmc_sed 's/|$//') IFS='|' read -ra profiles <<< "$profiles" for item in "${profiles[@]}"