X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=scripts%2Fvsomething;h=a87c1b77d5aa289393e543d10a1d52a1b30b7ba8;hb=c0ea11d48d9bf2c27ab89c41012a00b206b6bbf0;hp=556786903b853516c02686002284cf233aaa5a90;hpb=9c78378bebc1a9f3d400f422df8ede9efea57dea;p=util-vserver.git diff --git a/scripts/vsomething b/scripts/vsomething index 5567869..a87c1b7 100755 --- a/scripts/vsomething +++ b/scripts/vsomething @@ -23,12 +23,20 @@ test -e "$UTIL_VSERVER_VARS" || { } . "$UTIL_VSERVER_VARS" . "$_LIB_FUNCTIONS" +. "$__PKGLIBDIR/vserver.functions" function showHelp() { echo \ -$"Usage: $0 [--quiet|-q] [--debug] [--] * [--all] -- + +$"Usage: $0 [--quiet|-q] [--debug] [--] * [] -- + +where is any combination of: +--all All guests +--running All running guests +--stopped All stopped guests +--marked All guests with a mark set +--unmarked All guests without a mark set +--mark All guests with mark set Execute * foreach vserver. @@ -74,17 +82,24 @@ cmd=$1 title=${VSOMETHING_TITLE:-$cmd} shift -while test "$#" -ge 1; do - if getAllVserversByArg tmp "$1"; then - vservers=( "${vservers[@]}" "${tmp[@]}" ) - else +test "$1" != "--" || \ + shift + +if getAllVserversByArg tmp "$@"; then + vservers=( "${vservers[@]}" "${tmp[@]}" ) + while test "$#" -ge 1 -a "$1" != "--"; do + shift + done + shift +else + while test "$#" -ge 1; do case "$1" in (--) shift; break;; (*) vservers=( "${vservers[@]}" "$1" ) esac - fi - shift -done + shift + done +fi test "${#vservers[@]}" -ne 1 || is_quiet=1 @@ -105,8 +120,15 @@ for i in "${vservers[@]}"; do if pkgmgmt.isInternal "$i"; then $_VSERVER "$i" exec "$cmd" "$@" else - callInNamespace "$i" \ - "$_VNAMESPACE" --new -- "$VSOMETHING_WORKER" "$i" "$@" + _setVserverDir "$i" + # subshell so we don't have to clean up + ( _generateChbindOptions "$VSERVER_DIR" + $_VSERVER "$i" status &> /dev/null || \ + CHBIND_CMD=() + callInNamespace "$i" \ + $_VNAMESPACE --new -- \ + "${CHBIND_CMD[@]}" \ + "$VSOMETHING_WORKER" "$i" "$@" ) fi else "$cmd" "$i" "$@"