lib/pvl/cmd.sh
author Tero Marttila <terom@paivola.fi>
Mon, 09 Mar 2015 23:31:13 +0200
changeset 738 3104fdf7ea26
parent 709 4e0450dc57a9
permissions -rw-r--r--
pvl.hosts.hosts: drop support for instanced ip.* in favor of improved interface:ip.* =
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
}
709
4e0450dc57a9 lib/pvl/cmd: cmd_sudo
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    23
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    24
## Execute command, prefixing its output on stdout with given indent prefix.
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    25
#
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    26
#   indent  "    " $cmd...
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    27
#
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    28
# Output is kept on stdout, exit status is that of the given command.
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    29
function cmd_indent () {
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    30
    local indent="$1"; shift
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    31
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    32
    "$@" | sed "s/^/$indent/"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    33
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    34
    return ${PIPESTATUS[0]}
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    35
}
709
4e0450dc57a9 lib/pvl/cmd: cmd_sudo
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    36
4e0450dc57a9 lib/pvl/cmd: cmd_sudo
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    37
## Execute a command as root, using sudo if required.
4e0450dc57a9 lib/pvl/cmd: cmd_sudo
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    38
function cmd_sudo {
4e0450dc57a9 lib/pvl/cmd: cmd_sudo
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    39
    if [ $UID -eq 0 ]; then
4e0450dc57a9 lib/pvl/cmd: cmd_sudo
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    40
        cmd "$@"
4e0450dc57a9 lib/pvl/cmd: cmd_sudo
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    41
    else
4e0450dc57a9 lib/pvl/cmd: cmd_sudo
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    42
        cmd sudo "$@"
4e0450dc57a9 lib/pvl/cmd: cmd_sudo
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    43
    fi
4e0450dc57a9 lib/pvl/cmd: cmd_sudo
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    44
}