From 1ed71c9253277d8606c4201a528264bc62c20c4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Schplurtz=20le=20D=C3=A9boulonn=C3=A9?= Date: Sat, 15 Feb 2020 14:55:06 +0100 Subject: [PATCH 1/3] define sed as a function --- VBoxManage | 105 ++++++++++++++++++++++++++++------------------------- 1 file changed, 55 insertions(+), 50 deletions(-) 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[@]}" From 0ffc79dbe2cf743f1d11f65bb755476477f301cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Schplurtz=20le=20D=C3=A9boulonn=C3=A9?= Date: Sat, 15 Feb 2020 23:13:26 +0100 Subject: [PATCH 2/3] fix syntax error in _vbmc_sed --- VBoxManage | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VBoxManage b/VBoxManage index 174e175..bbb9748 100644 --- a/VBoxManage +++ b/VBoxManage @@ -8,7 +8,7 @@ # define the real sed command to use. GNU sed is needed _vbmc_sed() { - sed "$ @" + sed "$@" } _VBoxManage() { From 31a7eec15a850ebfcec4cd049f14d2b37c0a414c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Schplurtz=20le=20D=C3=A9boulonn=C3=A9?= Date: Sun, 16 Feb 2020 18:45:56 +0100 Subject: [PATCH 3/3] use sed from global var VBMC_SED instead of function --- VBoxManage | 107 ++++++++++++++++++++++++++--------------------------- 1 file changed, 53 insertions(+), 54 deletions(-) diff --git a/VBoxManage b/VBoxManage index bbb9748..a0a6483 100644 --- a/VBoxManage +++ b/VBoxManage @@ -6,14 +6,13 @@ # 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 + # env var GNUSED is either empty or points to a gnu sed executable + VBMC_SED=${GNUSED:-sed} + # Check the COMP_WORDS looking for name of the vm. If name contain space or # is enclosed in quotes, glue name together in variable name. Variable index # will hold the last index of COMP_WORDS array which contain the end of the @@ -70,10 +69,10 @@ _VBoxManage() { hdds=$(VBoxManage list hdds | \ grep -A 1 'normal (base)' | \ grep "Location:" | \ - _vbmc_sed 's/Location:\s\+//' | \ - _vbmc_sed 's/\s/\\ /g' | \ + $VBMC_SED 's/Location:\s\+//' | \ + $VBMC_SED 's/\s/\\ /g' | \ tr '\n' '|' | \ - _vbmc_sed 's/|$//') + $VBMC_SED 's/|$//') IFS='|' read -ra hdds <<< "$hdds" for item in "${hdds[@]}" @@ -88,10 +87,10 @@ _VBoxManage() { floppies=$(VBoxManage list floppies | \ grep "Location:" | \ - _vbmc_sed 's/Location:\s\+//' | \ - _vbmc_sed 's/\s/\\ /g' | \ + $VBMC_SED 's/Location:\s\+//' | \ + $VBMC_SED 's/\s/\\ /g' | \ tr '\n' '|' | \ - _vbmc_sed 's/|$//') + $VBMC_SED 's/|$//') IFS='|' read -ra floppies <<< "$floppies" for item in "${floppies[@]}" @@ -106,10 +105,10 @@ _VBoxManage() { dvds=$(VBoxManage list dvds | \ grep "Location:" | \ - _vbmc_sed 's/Location:\s\+//' | \ - _vbmc_sed 's/\s/\\ /g' | \ + $VBMC_SED 's/Location:\s\+//' | \ + $VBMC_SED 's/\s/\\ /g' | \ tr '\n' '|' | \ - _vbmc_sed 's/|$//') + $VBMC_SED 's/|$//') IFS='|' read -ra dvds <<< "$dvds" for item in "${dvds[@]}" @@ -135,16 +134,16 @@ _VBoxManage() { running_vms=$(VBoxManage list runningvms | \ awk -F ' {' '{ print $1 }' | \ tr '\n' '|' | \ - _vbmc_sed 's/|$//' | \ - _vbmc_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' '|' | \ - _vbmc_sed 's/|$//' | \ - _vbmc_sed 's/"//g') + $VBMC_SED 's/|$//' | \ + $VBMC_SED 's/"//g') IFS='|' read -ra vms <<< "$vms" for item in "${vms[@]}" do @@ -167,10 +166,10 @@ _VBoxManage() { vms=$(VBoxManage list vms -l | \ egrep '^Name|State' | \ egrep -B1 'State:\s+saved' | \ - grep Name |_vbmc_sed 's/Name:\s\+//' | \ + grep Name |$VBMC_SED 's/Name:\s\+//' | \ tr '\n' '|' | \ - _vbmc_sed 's/|$//' | \ - _vbmc_sed 's/"//g') + $VBMC_SED 's/|$//' | \ + $VBMC_SED 's/"//g') IFS='|' read -ra vms <<< "$vms" for item in "${vms[@]}" do @@ -184,9 +183,9 @@ _VBoxManage() { list=$(VBoxManage list groups | \ tr '\n' '|' | \ - _vbmc_sed 's/|$//' | \ - _vbmc_sed 's/\s/\\ /g'| \ - _vbmc_sed 's/"//g') + $VBMC_SED 's/|$//' | \ + $VBMC_SED 's/\s/\\ /g'| \ + $VBMC_SED 's/"//g') IFS='|' read -ra list <<< "$list" for item in "${list[@]}" @@ -201,9 +200,9 @@ _VBoxManage() { list=$(VBoxManage list ostypes | \ egrep ^ID: | \ - _vbmc_sed 's/ID:\s\+//' | \ + $VBMC_SED 's/ID:\s\+//' | \ tr '\n' '|' | \ - _vbmc_sed 's/|$//') + $VBMC_SED 's/|$//') IFS='|' read -ra list <<< "$list" for item in "${list[@]}" @@ -218,10 +217,10 @@ _VBoxManage() { list=$(VBoxManage list dhcpservers | \ grep NetworkName: | \ - _vbmc_sed 's/NetworkName:\s\+//' | \ - _vbmc_sed 's/\s/\\ /g'| \ + $VBMC_SED 's/NetworkName:\s\+//' | \ + $VBMC_SED 's/\s/\\ /g'| \ tr '\n' '|' | \ - _vbmc_sed 's/|$//') + $VBMC_SED 's/|$//') IFS='|' read -ra list <<< "$list" for item in "${list[@]}" @@ -236,10 +235,10 @@ _VBoxManage() { list=$(VBoxManage list hostonlyifs | \ egrep ^Name: | \ - _vbmc_sed 's/Name:\s\+//' | \ - _vbmc_sed 's/\s/\\ /g'| \ + $VBMC_SED 's/Name:\s\+//' | \ + $VBMC_SED 's/\s/\\ /g'| \ tr '\n' '|' | \ - _vbmc_sed 's/|$//') + $VBMC_SED 's/|$//') IFS='|' read -ra list <<< "$list" for item in "${list[@]}" @@ -258,8 +257,8 @@ _VBoxManage() { awk -F ',' '{print $1}' | \ awk -F '=' '{print $2}' | \ tr '\n' '|' | \ - _vbmc_sed 's/|$//' | \ - _vbmc_sed 's/\s/\\ /g') + $VBMC_SED 's/|$//' | \ + $VBMC_SED 's/\s/\\ /g') IFS='|' read -ra rules <<< "$rules" for item in "${rules[@]}" @@ -300,7 +299,7 @@ _VBoxManage() { devs=$(VBoxManage controlvm "${name//\\/}" \ webcam list | \ tr '\n' ' ' | \ - _vbmc_sed 's/|s$//') + $VBMC_SED 's/|s$//') read -ra devs <<< "$devs" for item in "${devs[@]}" @@ -317,7 +316,7 @@ _VBoxManage() { devs=$(VBoxManage list webcams | \ grep dev | \ tr '\n' ' ' | \ - _vbmc_sed 's/|s$//') + $VBMC_SED 's/|s$//') read -ra devs <<< "$devs" for item in "${devs[@]}" @@ -328,7 +327,7 @@ _VBoxManage() { _list_comp() { local list - list=$(VBoxManage list | _vbmc_sed -e '1,2d' \ + list=$(VBoxManage list | $VBMC_SED -e '1,2d' \ -e 's/VBoxManage list //' \ -e 's/[\[\]\|]/ /g' \ -e 's/|/ /g'|xargs echo) @@ -343,10 +342,10 @@ _VBoxManage() { folders=$(VBoxManage showvminfo ${vm} --machinereadable | \ grep SharedFolderName | \ awk -F= '{print $2}' | \ - _vbmc_sed 's/\s/\\ /g'| \ + $VBMC_SED 's/\s/\\ /g'| \ tr '\n' '|' | \ - _vbmc_sed 's/|$//' | \ - _vbmc_sed 's/"//g') + $VBMC_SED 's/|$//' | \ + $VBMC_SED 's/"//g') IFS='|' read -ra folders <<< "$folders" for item in "${folders[@]}" @@ -361,10 +360,10 @@ _VBoxManage() { list=$(VBoxManage list natnets | \ grep NetworkName: | \ - _vbmc_sed 's/NetworkName:\s\+//' | \ - _vbmc_sed 's/\s/\\ /g'| \ + $VBMC_SED 's/NetworkName:\s\+//' | \ + $VBMC_SED 's/\s/\\ /g'| \ tr '\n' '|' | \ - _vbmc_sed 's/|$//') + $VBMC_SED 's/|$//') IFS='|' read -ra list <<< "$list" for item in "${list[@]}" @@ -379,10 +378,10 @@ _VBoxManage() { list=$(VBoxManage list bridgedifs | \ egrep ^Name: | \ - _vbmc_sed 's/Name:\s\+//' | \ - _vbmc_sed 's/\s/\\ /g'| \ + $VBMC_SED 's/Name:\s\+//' | \ + $VBMC_SED 's/\s/\\ /g'| \ tr '\n' '|' | \ - _vbmc_sed 's/|$//') + $VBMC_SED 's/|$//') IFS='|' read -ra list <<< "$list" for item in "${list[@]}" @@ -397,10 +396,10 @@ _VBoxManage() { list=$(VBoxManage list intnets| \ egrep ^Name: | \ - _vbmc_sed 's/Name:\s\+//' | \ - _vbmc_sed 's/\s/\\ /g'| \ + $VBMC_SED 's/Name:\s\+//' | \ + $VBMC_SED 's/\s/\\ /g'| \ tr '\n' '|' | \ - _vbmc_sed 's/|$//') + $VBMC_SED 's/|$//') IFS='|' read -ra list <<< "$list" for item in "${list[@]}" @@ -443,10 +442,10 @@ _VBoxManage() { providers=$(VBoxManage list cloudproviders | \ grep "Short Name:" | \ - _vbmc_sed 's/Short Name:\s\+//' | \ - _vbmc_sed 's/\s/\\ /g' | \ + $VBMC_SED 's/Short Name:\s\+//' | \ + $VBMC_SED 's/\s/\\ /g' | \ tr '\n' '|' | \ - _vbmc_sed 's/|$//') + $VBMC_SED 's/|$//') IFS='|' read -ra providers <<< "$providers" for item in "${providers[@]}" @@ -461,10 +460,10 @@ _VBoxManage() { profiles=$(VBoxManage list cloudprofiles | \ grep "Name:" | \ - _vbmc_sed 's/Name:\s\+//' | \ - _vbmc_sed 's/\s/\\ /g' | \ + $VBMC_SED 's/Name:\s\+//' | \ + $VBMC_SED 's/\s/\\ /g' | \ tr '\n' '|' | \ - _vbmc_sed 's/|$//') + $VBMC_SED 's/|$//') IFS='|' read -ra profiles <<< "$profiles" for item in "${profiles[@]}"