]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
zsh-completion: fix for #4318 (#4394)
authorllua <llua@users.noreply.github.com>
Mon, 17 Oct 2016 12:35:26 +0000 (08:35 -0400)
committerLennart Poettering <lennart@poettering.net>
Mon, 17 Oct 2016 12:35:26 +0000 (14:35 +0200)
Escape unit names for the eval call in _call_program

The value of the Id property is transformed back into a unit name
usable by systemctl.
system-systemd\x5cx2dcryptsetup.slice -> system-systemd\x2dcryptsetup.slice

Also filter units by property via parameter expansion, not a for loop

shell-completion/zsh/_systemctl.in

index b52528693255b7455375e994355e46d6f7ebb28e..03a1c930b09f9f19fab1abb0dd19dc02464f776e 100644 (file)
@@ -123,15 +123,11 @@ _systemctl_really_all_units()
 }
 
 _filter_units_by_property() {
-  local property=$1 value=$2 ; shift ; shift
-  local -a units ; units=($*)
-  local props
-  for props in ${(ps:\n\n:)"$(_call_program units "$service $_sys_service_mgr show --no-pager --property="Id,$property" -- ${units} 2>/dev/null")"}; do
-    props=(${(f)props})
-    if [[ "${props[2]}" = "$property=$value" ]]; then
-      echo -E - " ${props[1]#Id=}"
-    fi
-  done
+  local property=$1 value=$2; shift 2
+  local -a units; units=("${(q-)@}")
+  local -A props
+  props=(${(f)"$(_call_program units "$service $_sys_service_mgr show --no-pager --property=\"Id,$property\" -- ${units} 2>/dev/null")"})
+  echo -E - "${(@g:o:)${(k@)props[(Re)$property=$value]}#Id=}"
 }
 
 _systemctl_get_template_names() { echo -E - ${^${(M)${(f)"$(__systemctl list-unit-files)"}##*@.[^[:space:]]##}%%@.*}\@ }