1212# You should have received a copy of the GNU General Public License
1313# along with this program. If not, see <http://www.gnu.org/licenses/>.
1414
15+ set -o pipefail
16+
1517_multipass_complete()
1618{
1719 _multipass_instances()
1820 {
19- local state=$1
20-
21- local cmd="multipass list --format=csv --no-ipv4 | \tail -n +2"
22- [ -n "$state" ] && cmd="$cmd | \awk -F',' '\$2 == \"$state\"'"
21+ local state=$1 instances
2322
24- local instances=$( \eval $cmd | \cut -d',' -f 1 | \tr '\r\n' ' ')
23+ instances=$(multipass list --format=csv --no-ipv4 | \tail -n +2)
24+ [ -n "$state" ] && instances=$(awk -F',' "\$2 == \"$state\"" <<< "$instances")
25+ instances=$(echo "$instances" | \cut -d',' -f 1 | \tr '\r\n' ' ')
2526
2627 _add_nonrepeating_args "$instances"
2728 }
2829
2930 _multipass_snapshots()
3031 {
31- local instance=$1
32- local cmd="multipass list --snapshots --format=csv 2>/dev/null | \tail -n +2"
33- [ -n "$instance" ] && cmd="$cmd | \awk -F',' '\$1 == \"$instance\"'"
34- local snapshots=$( \eval $cmd | \cut -d',' -f 1,2 | \tr ',' '.' | \tr '\r\n' ' ' )
32+ local instance=$1 snapshots
33+
34+ snapshots=$(multipass list --snapshots --format=csv 2>/dev/null | \tail -n +2)
35+ [ -n "$instance" ] && snapshots=$(awk -F',' "\$1 == \"$instance\"" <<< "$snapshots")
36+ snapshots=$(echo "$snapshots" | \cut -d',' -f 1,2 | \tr ',' '.' | \tr '\r\n' ' ')
3537
3638 _add_nonrepeating_args "$snapshots"
3739 }
@@ -44,11 +46,12 @@ _multipass_complete()
4446
4547 _multipass_restorable_snapshots()
4648 {
47- local instances=$( multipass info --no-runtime-information --format=csv \
48- | \tail -n +2 \
49- | \awk -F',|\r?\n' '$2 == "Stopped" && $16 > 0' \
50- | \cut -d',' -f 1 \
51- | \tr '\r\n' ' ')
49+ local instances
50+ instances=$( multipass info --no-runtime-information --format=csv \
51+ | \tail -n +2 \
52+ | \awk -F',|\r?\n' '$2 == "Stopped" && $16 > 0' \
53+ | \cut -d',' -f 1 \
54+ | \tr '\r\n' ' ')
5255
5356 for instance in ${instances}; do
5457 _multipass_snapshots "${instance}"
@@ -58,9 +61,7 @@ _multipass_complete()
5861 # Set $opts to the list of available networks.
5962 _multipass_networks()
6063 {
61- local cmd="multipass networks --format=csv 2>/dev/null"
62-
63- opts=$( \eval $cmd | \tail -n +2 | \cut -d',' -f 1 )
64+ opts=$( multipass networks --format=csv 2>/dev/null | \tail -n +2 | \cut -d',' -f 1 )
6465 }
6566
6667 _multipass_instances_with_colon()
@@ -79,8 +80,9 @@ _multipass_complete()
7980
8081 _multipass_settings_keys()
8182 {
82- local cmd="multipass get --keys"
83- local keys=$( \eval $cmd | \tr '\r\n' ' ' )
83+ local keys
84+
85+ keys=$( multipass get --keys | \tr '\r\n' ' ' )
8486
8587 for key in ${keys}; do
8688 if [[ "${COMP_WORDS[*]}" == *"${key}"* ]]; then
@@ -115,9 +117,7 @@ _multipass_complete()
115117 # Set $multipass_aliases to the list of available aliases.
116118 _multipass_aliases()
117119 {
118- local cmd="multipass aliases --format=csv 2>/dev/null"
119-
120- multipass_aliases=$( \eval $cmd | \tail -n +2 | \cut -d',' -f 1 )
120+ multipass_aliases=$( multipass aliases --format=csv 2>/dev/null | \tail -n +2 | \cut -d',' -f 1 )
121121 }
122122
123123 # Removes the comma or equals sign at the end of $cur.
@@ -198,7 +198,7 @@ _multipass_complete()
198198 for item in $array; do
199199 found=0
200200 for ((i=2; i<CWORD; i++)); do
201- if [[ "${WORDS[i]}" == ${item} ]]; then
201+ if [[ "${WORDS[i]}" == " ${item}" ]]; then
202202 found=1
203203 break
204204 fi
@@ -218,7 +218,7 @@ _multipass_complete()
218218 COMP_WORDBREAKS="${COMP_WORDBREAKS}="
219219 fi
220220
221- local cur cmd opts prev prev2 prev_opts multipass_aliases unused_aliases
221+ local cur cmd opts prev prev2 prev_opts multipass_aliases
222222 _get_comp_words_by_ref -n := -w WORDS -i CWORD cur prev
223223 COMPREPLY=()
224224 cur="${COMP_WORDS[COMP_CWORD]}"
@@ -272,7 +272,7 @@ _multipass_complete()
272272 ;;
273273 "unalias")
274274 _multipass_aliases
275- _add_nonrepeating_args $multipass_aliases
275+ _add_nonrepeating_args " $multipass_aliases"
276276 ;;
277277 "transfer"|"copy-files")
278278 _add_nonrepeating_args "--parents --recursive"
0 commit comments