d3trax
10/24/2018 - 9:04 AM

GNU Parallel

GNU Parallel

#!/bin/bash

FOLDER_NAME="GnuParallel"

try()
{
  local BG=
  local QU=
  local TITLE=$1
  shift

    [[ $1 == -b ]] && { BG=1; shift; }
    [[ $1 == -q ]] && { QU=1; shift; }
    [[ $1 == -- ]] && {       shift; }

    if [[ -z $BG ]]; then
        if [[ $QU -ne 0 ]]; then
          "$@" > /dev/null 2> /dev/null
        else
          "$@"
        fi
    else
        if [[ $QU -ne 0 ]]; then
          "$@" > /dev/null 2> /dev/null &
        else
          "$@" &
        fi
    fi

    if [[ $? -ne 0 ]]; then
        echo "Failed to execute - ${TITLE}" >&2
        exit 1
    fi
}

download()
{
    echo "Downloading and installing Gnu parallel..."
    mkdir ${FOLDER_NAME}
    cd ${FOLDER_NAME}

    try "Download source code" wget http://ftp.gnu.org/gnu/parallel/parallel-latest.tar.bz2
    try "Extract archive" tar -xvjf parallel-latest.tar.bz2

    cd parallel-*

    try "Configure Gnu parallel" ./configure
    try "Compile the project" make
}

install()
{
    try "Install Gnu parallel" sudo make install
    cd ../../
    echo "Build complete"

    parallel --version | grep `date +"%Y"`

    if [ $? -eq 0 ]; then
      echo "All done!"
    else
      echo "Setup complete but parallel version check failed" >&2
      exit 1
    fi
}

cleanup()
{
    echo "Cleaning up"
    rm -fr ${FOLDER_NAME}
}

download

if [ "$1" == "install" ]; then
    install
    cleanup
fi