X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=scripts%2Ffunctions;h=7d6278b73e07343ad0a36ce755f94dc459d16d80;hb=b63f833a8e17bc194c8f1c5f97fd5d60a53d281e;hp=69e289c68e9845fa758a67a419960d1f431c1621;hpb=342d38327d99faf364a0a876d6da0353a6718d8c;p=util-vserver.git diff --git a/scripts/functions b/scripts/functions index 69e289c..7d6278b 100644 --- a/scripts/functions +++ b/scripts/functions @@ -526,6 +526,10 @@ function getAllVservers { local _ga_i declare -a _ga_tmp=() + local _ga_IFS="$IFS" + IFS=, + local -a _ga_marks=( $3 ) + IFS="$_ga_IFS" for _ga_i in $__CONFDIR/*; do isRegularFile "$_ga_i" -d || continue @@ -542,7 +546,19 @@ function getAllVservers (STOPPED) ! $_VSERVER "$_ga_i" running &>/dev/null || _ga_doadd=;; (RUNNING) $_VSERVER "$_ga_i" running &>/dev/null || _ga_doadd=;; (ALL) ;; - (MARK) test -s "$_ga_markfile" && grep -qx "$3" "$_ga_markfile" || _ga_doadd=;; + (MARK) local _ga_j + local _ga_mark + local _ga_f=false + local _ga_invert=false + for _ga_j in "${_ga_marks[@]}"; do + _ga_mark="$(echo "$_ga_j" | $_SED 's/^[!~]//')" + test "$_ga_j" = "$_ga_mark" || _ga_invert=true + test -s "$_ga_markfile" && $_GREP -qx "$_ga_mark" "$_ga_markfile" && \ + _ga_f=true || : + done + test $_ga_f = $_ga_invert && \ + _ga_doadd= + ;; (*) panic $"Unknown vserver tagging '$2'";; esac @@ -588,7 +604,8 @@ function getAllVserversByArg _gav_res=( "${_gav_tmp[@]}" ) else local _gav_i=0 - while test $_gav_i -lt "${#_gav_res[@]}"; do + local _gav_n="${#_gav_res[@]}" + while test $_gav_i -lt $_gav_n; do local _gav_found=0 for _gav_j in "${_gav_tmp[@]}"; do if test "$_gav_j" = "${_gav_res[$_gav_i]}"; then