lib/pvl/cmd.sh
author Tero Marttila <tero.marttila@aalto.fi>
Mon, 02 Mar 2015 20:02:14 +0200
changeset 701 8ddc141af313
parent 627 a81206440be2
child 709 4e0450dc57a9
permissions -rw-r--r--
update pvl/hosts: only test the global dhcp config, since things like sublclasses means that the individual dhcp confs will not pass
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     1
### Command execution
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     2
## Execute command, possibly logging its execution.
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     3
#
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     4
#   cmd     $cmd...
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     5
#
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     6
# Fails if the command returns an error exit code.
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     7
function cmd {
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     8
    log_cmd "$@"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     9
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    10
    "$@" || die "Failed: $@"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    11
}
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    12
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    13
## Execute command as a test, logging its execution at log_cmd
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    14
#
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    15
#   cmd_test $cmd... && ... || ...
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    16
#
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    17
# Fails if the command returns an error exit code.
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    18
function cmd_test {
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    19
    log_cmd "$@"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    20
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    21
    "$@"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    22
}
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    23
## Execute command, prefixing its output on stdout with given indent prefix.
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    24
#
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    25
#   indent  "    " $cmd...
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    26
#
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    27
# Output is kept on stdout, exit status is that of the given command.
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    28
function cmd_indent () {
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    29
    local indent="$1"; shift
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    30
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    31
    "$@" | sed "s/^/$indent/"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    32
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    33
    return ${PIPESTATUS[0]}
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    34
}